2011-08-10 10 views
0

インターフェイスを、たとえばITestというように、構造体、たとえばstruct Testに解決するようにUnityを設定します。これまでのところ私は、次があります。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

関連する問題