我试着按照this blog实现依赖注入与团结,但我在boostrapper.cs(我用Unity.MVC4库)得到一个错误。有人能指出我在这里失去了什么吗?依赖注入的ASP.NET Web API使用Unity错误
ERROR: IoCContainer does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator. Parameter name: commonServiceLocator
public static class Bootstrapper
{
public static IUnityContainer Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
// this throws "does not appear to implement Microsoft.Practices.ServiceLocation.IServiceLocator.... error"
DependencyResolver.SetResolver(new IoCContainer(container));
return container;
}
....
}
这是
public class ScopeContainer : IDependencyScope
{
protected IUnityContainer container;
public ScopeContainer(IUnityContainer container)
{
if (container == null)
{
throw new ArgumentNullException("container");
}
this.container = container;
}
public object GetService(Type serviceType)
{
if (container.IsRegistered(serviceType))
{
return container.Resolve(serviceType);
}
else
{
return null;
}
}
public IEnumerable<object> GetServices(Type serviceType)
{
if (container.IsRegistered(serviceType))
{
return container.ResolveAll(serviceType);
}
else
{
return new List<object>();
}
}
public void Dispose()
{
container.Dispose();
}
}
class IoCContainer : ScopeContainer, IDependencyResolver
{
public IoCContainer(IUnityContainer container)
: base(container)
{
}
public IDependencyScope BeginScope()
{
var child = container.CreateChildContainer();
return new ScopeContainer(child);
}
}
的IoCContainer类的其他!林要求在app_start的bootrapper这我不知道它的正确
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Bootstrapper.Initialise();
}
我也有,这可能涉及到路由的感觉,其实我加入了经典的MVC路由的配置,因为我读到的WebAPI和MVC使用不同的“激活剂”的东西或somehing像
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "RestApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
和错误是...? – abatishchev
并删除所有不直接相关的代码,使问题更加清楚,请。 – abatishchev
//这将引发“似乎并没有实现Microsoft.Practices.ServiceLocation.IServiceLocator ....错误” – lincx