2012-09-05 75 views
17

工作,我用從autofac MVC的整合是這樣的:MVC的Web API不Autofac集成

... 
var container = builder.Build(); 
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

但現在我要重新與新的網絡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類,它將起作用。

autofac和web api rtm仍然存在問題嗎? (目前的集成是RC版)

回答

44

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需要注入decencies定期MVC Controller衍生控制器。

並且需要AutofacWebApiDependencyResolver將依賴關係注入到Web.API ApiController派生的控制器。

而且不要忘記在呼叫您的集裝箱製造商來註冊你的API控制器(它通常builder.RegisterControllers方法不同):

builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 
+0

我再次使用AutofacDependencyResolver對我的工作。感謝您的信息。有一些參考鏈接嗎?微軟/ autofac解釋了這一點嗎?是使用ApiControler的,但是如果我想將DependecyResolver強制轉換爲AutofacWebApiDependencyResolver,它會失敗。 – user437899

+0

這似乎是,如果我通過DependencyResolver.Curren訪問解析器,我得到MVC解析器。 WebApiResolver semms負責將參數注入ApiControllers。如果我想解決控制器方法中的任何類型,我必須使用MVC Resovler – user437899

+0

@Max抱歉,我兩次都遲到了,其他社區成員拒絕了您的編輯,因爲它雖然增加了一個優點,但您應該留下評論相反(我知道你沒有足夠的聲譽,但它並不遙遠),因爲處理回覆編輯的政策非常嚴格,審稿人認爲你想改變我的答案太多。無論如何感謝您在我的建議中編輯的幫助。 – nemesv