【问题标题】:MVC Web API not working with Autofac IntegrationMVC Web API 不适用于 Autofac 集成
【发布时间】:2012-09-05 07:55:14
【问题描述】:

我像这样使用 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版)

【问题讨论】:

    标签: asp.net-web-api autofac


    【解决方案1】:

    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());
    

    【讨论】:

    • 我再次使用 AutofacDependencyResolver 进行工作。感谢您的信息。有一些参考链接吗? microsoft / autofac 是否在某处解释了这一点?正在使用 ApiControler,但如果我想将 DependecyResolver 强制转换为 AutofacWebApiDependencyResolver,它会失败。
    • 似乎如果我通过 DependencyResolver.Curren 访问解析器,我得到了 MVC 解析器。 WebApiResolver 负责将参数注入 ApiControllers。如果我想解析控制器方法中的任何类型,我必须使用 MVC Resovler
    • @Max 抱歉,我两次都迟到了,其他社区成员拒绝了您的编辑,因为尽管它增加了一个好点,但您应该留下评论(我知道您没有足够的声誉但不远了)因为处理答案编辑的政策相当严格,审稿人觉得你太想改变我的答案。无论如何,感谢我在您的建议中编辑的帮助。
    【解决方案2】:

    下面是一个很好的例子

    Using Autofac with Web Api

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 2013-02-27
      相关资源
      最近更新 更多