2013-11-15 54 views
1

我試圖在ASP.NET Web Api項目中配置Unity IoC。 Unity.WebAPI包我已經安裝:使用Web API配置Unity IoC 4.5

PM>安裝,包裝Unity.MVC4

,並添加下面的代碼到Initialise方法Bootstrapper類:

DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

而且我已經在容器中註冊了我的存儲庫:

container.RegisterType<IProductRepository, ProductRepository>(); 

但我的應用程序崩潰的錯誤Type 'MvcApplication1.Controllers.ValuesController' does not have a default constructor. 有人可以指出我錯過了什麼?我使用.Net Framework 4.5。 Unity的哪個包可以用於我的目的(Unity.WebAPI,Unity.MVC4,...)?

更新時間:注射庫到控制器:

private readonly IProductRepository _repository; 

public ValuesController(IProductRepository repository) 
{ 
    _repository = repository; 
} 
+0

我想你應該添加ValuesController'的'代碼,以及似乎裏面錯誤與之相關,那個控制器裏面有哪些方法,你試圖調用哪一個? – DrCopyPaste

+0

糟糕!對不起,剛更新。 –

+0

等一下!首先你說'我已經安裝了Unity.WebAPI',但是你現在安裝了'Unity.MVC4'這是它的一個,你在建什麼? MVC應用程序或Web API應用程序? – DrCopyPaste

回答

1

你所做的看起來不錯,到目前爲止,但我認爲你缺少只是這一行

Bootstrapper.Initialise(); 

這應該是g Ø到應用程序Global.asax.cs對MVC的應用程序,例如啓動代碼,只需把它放在那裏,在年底這個方法

protected void Application_Start() 
+0

是啊!謝謝你,這是非常有趣的遺漏:) –

+0

@ alex.mironov很高興幫助;) – DrCopyPaste

0

也許你在這篇文章下面。如果沒有,它可以幫助你。

http://www.asp.net/web-api/overview/extensibility/using-the-web-api-dependency-resolver

關於錯誤,請嘗試添加一個構造函數控制器不帶參數:

public ValuesController() 
{ 

} 
+1

我不需要無參數構造函數,因爲我必須將資源庫注入控制器... –

+0

我很抱歉,您是正確的。 我剛纔提到了無參數的構造函數,因爲它看起來像代碼中的某個地方應該是可用的控制器的默認構造函數,這是一個沒有參數的構造函數。 – scubaFun

+0

@emendezrivas只是爲了澄清一下。你所描述的是默認行爲。然而,Unity的IoC應該重寫該行爲,因爲Unity始終會嘗試將構造函數與最多的參數進行匹配。因此,在其他情況下,您應該是對的,但對於IoC而言,您必須「切換」您的腦袋,以確保默認行爲不同=>即配置錯誤。 – DrCopyPaste