Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity是否可以配置为在运行时加载和卸载模块_C#_.net_Dependency Injection_Inversion Of Control_Unity Container - Fatal编程技术网

C# Unity是否可以配置为在运行时加载和卸载模块

C# Unity是否可以配置为在运行时加载和卸载模块,c#,.net,dependency-injection,inversion-of-control,unity-container,C#,.net,Dependency Injection,Inversion Of Control,Unity Container,目前我正在使用Unity在运行时解析类型 IUnityContainer _container = new UnityContainer(); _container.LoadConfiguration(); var instance = _container.Resolve<IGenericLib>("Class1"); instance.DoSomething(); 所以,我现在只是重新调用Class1,虽然我总共有三种类型,在配置部分中定义 <unity>

目前我正在使用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>
现在我设置一个断点来查看加载的模块,下面是快照

在调用Load Configuration(加载配置)之前,我的所有组件都不会加载到内存中

但是在调用load配置的那一刻,我的三个assmbly都被加载了,尽管我只是重新加载Class1

是否有方法可以控制这些模块的加载?只需加载当前解析的模块并在使用后卸载即可。

LoadContainer加载所有配置的模块。在第节中,您有三个模块,因此unity将加载这三个模块。解析只是获取已加载模块的实例。要控制要加载的模块,可以使用重载方法:

IUnityContainer container = new UnityContainer()
    .LoadConfiguration("Class1");
您还可以从不同部分加载模块:

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

Thansk,有没有办法在使用后卸载它们