Asp.net-Mvc-4
從 beta 升級後的 Autofac / MVC4 / WebApi (RC) 依賴注入問題
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);