我使用autofac的MVC集成,如下所示:
... var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
但现在我想用新的Web Api RTM重新创建解决方案。
而且我想使用新的AutofacWebApiDependencyResolver类。
但是如果我这样做与AutofacWebApiDependencyResolver我得到这个错误:
The type Autofac.Integration.WebApi.AutofacWebApiDependencyResolver
does not appear to implement
Microsoft.Practices.ServiceLocation.IServiceLocator.
我读了,现在我必须这样做来设置解析器:
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
但是如果我使用’=’设置它,则不会设置。它仍然是DefaultResolver …
如果我再次使用MVC AutofacDependencyResolver类,它可以工作。
自动装载机和网络应用程序仍然存在问题? (目前的一体化是RC版)
解决方法
ASP.Net Wep.API和ASP.NET MVC使用两个不同的IDependencyResolver(因为他们设计的Wep.API不依赖于ASP.NET MVC),所以你需要设置两者:
var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
因此,需要使用AutofacDependencyResolver来将常规MVC控制器派生控制器注入。
并且需要AutofacWebApiDependencyResolver来将依赖关系注入到Web.API ApiController派生控制器中。
并且不要忘记在您的容器构建器中使用调用注册您的Api控制器(与通常的builder.RegisterControllers方法不同):
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());