Asp.net mvc 使用Unity错误在ASP.NET Web API中进行依赖项注入
我试图按照Unity实现依赖注入,但我在boostrapper.cs(我使用Unity.MVC4库)中遇到了一个错误。有人能告诉我我缺少什么吗 错误:IoCContainer不存在 似乎实施 Microsoft.Practices.ServiceLocation.IServiceLocator。参数名称: 公共服务提供者 这是IoCContainer类Asp.net mvc 使用Unity错误在ASP.NET Web API中进行依赖项注入,asp.net-mvc,asp.net-mvc-4,dependency-injection,asp.net-web-api,unity-container,Asp.net Mvc,Asp.net Mvc 4,Dependency Injection,Asp.net Web Api,Unity Container,我试图按照Unity实现依赖注入,但我在boostrapper.cs(我使用Unity.MVC4库)中遇到了一个错误。有人能告诉我我缺少什么吗 错误:IoCContainer不存在 似乎实施 Microsoft.Practices.ServiceLocation.IServiceLocator。参数名称: 公共服务提供者 这是IoCContainer类 public class ScopeContainer : IDependencyScope { protected I
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);
}
}
我也有一种感觉,它可能与路由有关,我实际上在配置中添加了经典的MVC路由,因为我读到webapi和MVC使用不同的“激活器”之类的东西
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 }
);
找到了答案,看起来博客已经过时了,因为我甚至不需要创建IoCContainer,因为我只需要安装
Unity.WebAPI
,然后将DependencyResolver
设置为new Unity.WebAPI.UnityDependencyResolver(容器)代码>
信用证:并删除所有直接无关的代码以使问题更清楚,请//这抛出“似乎没有实现Microsoft.Practices.ServiceLocation.IServiceLocator…错误”,同样值得Unity团队注意:和。因此,可以在控制器中使用GlobalConfiguration.Configuration.DependencyResolver吗?
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Bootstrapper.Initialise();
}
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 }
);
public static class Bootstrapper
{
public static IUnityContainer Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);
return container;
}