Asp.net-Mvc-4

從 beta 升級後的 Autofac / MVC4 / WebApi (RC) 依賴注入問題

  • April 7, 2016
var resolver = new AutofacWebApiDependencyResolver(container);
configuration.ServiceResolver.SetResolver(resolver);

更新到 ASP.NET MVC4 (RC) 後,我收到以下錯誤:

“System.Web.Http.HttpConfiguration”不包含“ServiceResolver”的定義,並且找不到接受“System.Web.Http.HttpConfiguration”類型的第一個參數的擴展方法“ServiceResolver”(您是否缺少 using 指令還是彙編參考?)

看完這篇(http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver)我意識到這些介面已經改變了,但我不知道如何應用這改變了我使用 Autofac 的方式。

我需要等待 Autofac 的新版本還是有其他方法可以解決這個問題。

編輯: 正如 James Bradt 在下面的文章中提到的那樣,Autofac 軟體包現已更新以解決此問題,因此將來遇到此執行緒的任何人都應該先嘗試新軟體包 :)

基本上,使用新包,您只需要在 global.asax.cs 中執行此操作:

GlobalConfiguration.Configuration.DependencyResolver = new Autofac.Integration.WebApi.AutofacWebApiDependencyResolver(container);

/編輯

我剛剛遇到了同樣的問題——我能夠通過創建一個簡單的 IDependencyResolver 實現來解決它,該實現包裝了現有的 AutofacDependencyResolver。

正如類名所暗示的那樣,我將此視為臨時解決方案 - BeginScope 和 Dispose 方法需要一些工作,並且顯然不適合生產環境,但這允許我繼續開發,直到出現適當的解決方案。

因此,有了這些警告,IDependencyResolver 實現看起來像這樣:

public class TemporaryDependencyResolver : IDependencyResolver
{
   private readonly AutofacDependencyResolver _autofacDependencyResolver;

   public TemporaryDependencyResolver(AutofacDependencyResolver autofacDependencyResolver)
   {
       _autofacDependencyResolver = autofacDependencyResolver;
   }

   public void Dispose()
   {
   }

   public object GetService(Type serviceType)
   {
       return _autofacDependencyResolver.GetService(serviceType);
   }

   public IEnumerable<object> GetServices(Type serviceType)
   {
       return _autofacDependencyResolver.GetServices(serviceType);
   }

   public IDependencyScope BeginScope()
   {
       return this;
   }
}

我在 Global.asax.cs 中這樣設置:

var container = builder.Build();
var resolver = new AutofacDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = new TemporaryDependencyResolver(resolver);

引用自:https://stackoverflow.com/questions/10866655