2009-03-13 5 views
2

내가, 내가 각 클래스의로드를 2 개 클래스를 구현하는 하나의 인터페이스가 필요했지만 단결이 있습니다Unity Framework : 동일한 인터페이스에서 두 개의 클래스를 인스턴스화하는 방법은 무엇입니까?

:

m_unityContainer.Resolve을() // 어디

내 설정의 모습 IGeneric 인터페이스입니다

 <type type="IGeneric" mapTo="ClassA"> 
     </type> 
     <type type="IGeneric" mapTo="ClassB"> 
     </type> 

어떤 아이디어가 있습니까?

감사

+0

내가 설정에 같은 시간에 같은 –

답변

1

이 당신에게 IGeneric을 구현 등록 된 모든 클래스를 제공 할 것입니다.




및 코드 OBJ = container.ResolveAll과 같이 표시됩니다

IEnumerable<IGeneric> objects = container.ResolveAll<IGeneric>(); 
0

내가 해결책을 발견, 이름 속성은 각 항목에서 사용할 수있다 ("ClassA");

container.RegisterType<IGeneric<ClassA>, ClassA>(); 
container.RegisterType<IGeneric<ClassB>, ClassB>(); 

ClassA classA = container.Resolve<IGeneric<ClassA>>(); 
ClassB classB = container.Resolve<IGeneric<ClassB>>(); 

어떤 흥미로운 일들이 당신이 아래로 갈 때 일어나는 시작 :

public interface IGeneric{} 

public interface IGeneric<T> : IGeneric{} 

는 그 다음 인터페이스의 유형의 안전 해상도가 :

2

당신은 또한 다음과 같이 일반적인 인터페이스를 사용할 수 있습니다 이 도로는 ...

+0

뭔가를 두 클래스를 인스턴스화해야합니다 Schalk

0

Schalk - 좋아 보인다. Unity.config에서이를 지정하는 표기법은 무엇입니까?

0

약간 다른 방식입니다. Unity.2.1.505.2를 사용하고 있습니다.

<configSections> 
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/> 
    </configSections> 


     <unity> 
     <container> 
      <register type="IVehicle" mapTo="Car" name="myCarKey" /> 
      <register type="IVehicle" mapTo="Truck" name="myTruckKey" /> 
     </container> 
     </unity> 

다음은 DotNet 코드입니다.

 UnityContainer container = new UnityContainer(); 

     UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); 
     section.Configure(container); 


IVehicle v1 = container.Resolve<IVehicle>("myCarKey"); 

IVehicle v2 = container.Resolve<IVehicle>("myTruckKey"); 

참조 :

http://msdn.microsoft.com/en-us/library/ff664762(v=pandp.50).aspx

관련 문제