我使用autofac的MVC集成如下:
...
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
但现在我想用新的Web Api RTM重新创建解决方案。 我想使用新的AutofacWebApiDependencyResolver类。
但如果我使用AutofacWebApiDependencyResolver执行此操作,则会出现此错误:
类型Autofac.Integration.WebApi.AutofacWebApiDependencyResolver 似乎没有实现 Microsoft.Practices.ServiceLocation.IServiceLocator。
我读到我现在必须这样做才能设置解析器:
GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
但是如果我用'='设置它,它就不会被设置。它仍然是DefaultResolver ......
如果我再次使用MVC AutofacDependencyResolver类,它可以工作。
autofac和web api rtm仍然存在问题吗? (目前的集成是RC版本)
答案 0 :(得分:47)
IDependencyResolver
(因为他们将Wep.API设计为不依赖于ASP.NET MVC)所以你需要设置两个:
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
GlobalConfiguration.Configuration.DependencyResolver =
new AutofacWebApiDependencyResolver(container);
因此需要AutofacDependencyResolver
将常规注入常规MVC Controller
派生控制器。
需要AutofacWebApiDependencyResolver
将依赖项注入Web.API ApiController
派生控制器。
并且不要忘记通过调用在容器构建器中注册您的Api控制器(它与通常的builder.RegisterControllers
方法不同):
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
答案 1 :(得分:0)
以下是一个非常好的例子