2011-08-10 88 views
0

我想配置Unity來將一個接口(比如說ITest)解析爲一個結構,比如struct Test。到目前爲止,我有未來:是否可以將結構綁定到Unity中的接口?

<unity> 
    <containers> 
     <container> 
      <types> 
       <type 
        type="my.ITest, asm" 
        mapTo="my.Test, asm"> 
       </type> 
      </types> 
     </container> 
    </containers> 
</unity> 

但我發現了一個錯誤:

Resolution of the dependency failed, type = "my.ITest", name = "(none)". 
Exception occurred while: while resolving. 
Exception is: InvalidOperationException - The type Test cannot be constructed. You must configure the container to supply this value. 
At the time of the exception, the container was:  
Resolving my.Test,(none) (mapped from my.ITest,(none)) 

爲什麼?

回答

0

問題是你正在嘗試使用Unity構造一個結構體;因爲結構是一個值類型,所以Activator.CreateInstance在嘗試創建它時(由於接口)將會打斷塊。

例如:

var item = Activator.CreateInstance<Test>(); 

會拋出一個異常「無法創建一個接口的實例」。在內部,Unity可能會使用Activator.CreateInstance鏈中的某個地方(我一直在查看Unity的代碼叢,現在已經有一段時間了),那就是它會死的地方。

我建議改爲一個類的實現,而不是一個結構。

+1

爲什麼'Activator.CreateInstance'不能夠創建一個結構? – Lee

+0

我測試了這一點;當結構體上有一個接口時,CreateInstance調用失敗。不明原因。 – Tejs

+1

'Int32'實現了許多接口,工作正常。 – Lee

相關問題