新文章 网摘 文章 随笔 日记

asp.net Web API-网络-MVC Web API无法与Autofac Integration一起使用

我使用了来自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版本)


 需要引用Autofac、Autofac.Mvc5、Autofac.WebApi2
 

builder.RegisterControllers(assemblies);
builder.RegisterApiControllers(assemblies);

 

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 Controller派生的常规控制器中。

并且AutofacWebApiDependencyResolver需要将依赖项注入到Web.API ApiController派生的控制器中。

并且不要忘记通过调用在容器构建器中注册Api控制器(这与通常的builder.RegisterControllers方法不同):

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());

 
posted @ 2020-09-21 14:26  岭南春  阅读(107)  评论(0)    收藏  举报