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