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> 

로드 된 모듈을 살펴보기 위해 중단 점을 설정하고 있습니다. 여기에 스냅 샷이 있습니다. 내가로드 구성을 요청하기 전에

, 난 그냥 클래스 1을 reolving하고 있지만, 내 assmbly의 세 가지를 모두로드, 내 aseemblies 아무도

enter image description here

, 메모리에로드되지 않습니다하지만 순간 부하 구성이라 .

enter image description here

가 나는 이러한 모듈의 로딩? 그냥 부하 현재 해결 모듈을 제어하고 사용 후 언로드 할 수있는 방법입니다.

답변

1

LoadContainer()은 구성된 모든 모듈을로드합니다. <container> 섹션에는 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