23

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

4

2 回答 2

56

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需要将正派注入常规 MVCController派生控制器。

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

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

builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
于 2012-09-05T08:01:48.890 回答
0

下面是一个很好的例子

将 Autofac 与 Web Api 一起使用

于 2018-05-08T10:01:48.497 回答