0

現在、実行時にタイプを解決するためにUnityを使用しています。実行時にモジュールをロード/アンロードするようにUnityを設定することができます

IUnityContainer _container = new UnityContainer(); 
_container.LoadConfiguration(); 

var instance = _container.Resolve<IGenericLib>("Class1"); 

instance.DoSomething(); 

したがって、設定セクションでは合計3つのタイプが定義されていますが、現時点ではClass1を再設定しています。

<unity> 
    <namespace name="GenricType.Interface"/> 
    <namespace name="Sample.Type1"/> 
    <namespace name="Sample.Type2"/> 
    <namespace name="Sample.Type3"/> 
    <assembly name="GenricType.Interface"/> 
    <assembly name="Sample.Type1"/> 
    <assembly name="Sample.Type2"/> 
    <assembly name="Sample.Type3"/> 
    <container> 
     <register type="IGenericLib" mapTo="Class1" name="Class1"/> 
     <register type="IGenericLib" mapTo="Class2" name="Class2"/> 
     <register type="IGenericLib" mapTo="Class3" name="Class3"/> 
    </container> 
    </unity> 

ここでは、ロードされたモジュールを見るためにブレークポイントを設定しています。ここにはスナップショットがあります。

私はロードの設定を呼び出す前に、私のaseembliesのどれがメモリにロードされていない、

enter image description here

しかし、モーメント荷重の設定が呼び出され、私はただのClass1をreolvingていますが、私のassmblyのすべての3つは、ロードされています。

enter image description here

私は、これらのモジュールのロード?現在解決され、使用後にアンロードされるだけでロードモジュールを制御できる方法はあります。

答えて

1

LoadContainer()は、すべての構成済みモジュールをロードします。 <container>セクションには、3つのモジュールがあり、すべてが3つのモジュールをロードします。解決は、すでにロードされているモジュールのインスタンスを取得することです。

IUnityContainer container = new UnityContainer() 
    .LoadConfiguration("Class1"); 

あなたはまた、別のセクションからモジュールをロードすることができます:

IUnityContainer container = new UnityContainer() 
    .LoadConfiguration(section) // Loads unnamed <container> element 
    .LoadConfiguration(section, "otherContainerElement"); // named <container> element 
+0

Thanskを、そして私が使用した後にそれらをアンロードすることができます方法はありますが、あなたがオーバーロードメソッドを使用することができますロードするモジュール内容を制御するために、 – Simsons

関連する問題