Unity是否可以配置为在运行时加载和卸载模块
Can Unity be configured to load and unload modules at runtime
目前我在 运行 时使用 Unity 解析类型。
IUnityContainer _container = new UnityContainer();
_container.LoadConfiguration();
var instance = _container.Resolve<IGenericLib>("Class1");
instance.DoSomething();
所以,我现在只是在修改 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>
现在我正在设置一个断点来查看加载的模块,这里是快照。
在我调用加载配置之前,none 个组件已加载到内存中,
但是当加载配置被调用时,我的三个程序集都被加载了,虽然我只是 reolving Class1。
有什么方法可以控制这些模块的加载吗?只需加载当前解析的模块,使用后卸载即可。
LoadContainer()
加载所有已配置的模块。在 <container>
部分中,您有三个模块,因此 unity 会加载所有三个模块。解析只是获取已加载模块的实例。要控制要加载的模块,可以使用重载方法:
IUnityContainer container = new UnityContainer()
.LoadConfiguration("Class1");
您还可以从不同的部分加载模块:
IUnityContainer container = new UnityContainer()
.LoadConfiguration(section) // Loads unnamed <container> element
.LoadConfiguration(section, "otherContainerElement"); // named <container> element
目前我在 运行 时使用 Unity 解析类型。
IUnityContainer _container = new UnityContainer();
_container.LoadConfiguration();
var instance = _container.Resolve<IGenericLib>("Class1");
instance.DoSomething();
所以,我现在只是在修改 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>
现在我正在设置一个断点来查看加载的模块,这里是快照。
在我调用加载配置之前,none 个组件已加载到内存中,
但是当加载配置被调用时,我的三个程序集都被加载了,虽然我只是 reolving Class1。
有什么方法可以控制这些模块的加载吗?只需加载当前解析的模块,使用后卸载即可。
LoadContainer()
加载所有已配置的模块。在 <container>
部分中,您有三个模块,因此 unity 会加载所有三个模块。解析只是获取已加载模块的实例。要控制要加载的模块,可以使用重载方法:
IUnityContainer container = new UnityContainer()
.LoadConfiguration("Class1");
您还可以从不同的部分加载模块:
IUnityContainer container = new UnityContainer()
.LoadConfiguration(section) // Loads unnamed <container> element
.LoadConfiguration(section, "otherContainerElement"); // named <container> element