加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-web-api – MVC Web API不能与Autofac集成

发布时间:2020-12-16 00:31:09 所属栏目:asp.Net 来源:网络整理
导读:我使用autofac的MVC集成,如下所示: ...var container = builder.Build();DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 但现在我想用新的Web Api RTM重新创建解决方案。 而且我想使用新的AutofacWebApiDependencyResolver类
我使用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());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读