0

目前,我正在使用Unity在運行時解析類型。可以將Unity配置爲在運行時加載和卸載模塊

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

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

instance.DoSomething(); 

所以,我只是reolving的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

但當下負載配置是所謂的,我的三個ASSMBLY被加載,雖然我只是reolving的Class1 。

enter image description here

有沒有一種方法,我可以控制這些模塊的加載?就在負載當前解決模塊,使用後卸載。

回答

1

LoadContainer()加載所有配置的模塊。在<container>部分你有三個模塊,所以統一加載所有三個。解決方法就是獲取已經加載的模塊的實例。要控制你想要的模塊加載,你可以使用重載方法:

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

相關問題