2017-05-17 3 views
0

동일한 유형의 두 개의 다른 인젝션 팩토리를 등록하고 싶습니다. 예를 들어 아래 두 개의 등록이 될 수 있습니다.유니티가 다른 인젝션 팩토리를 선택하십시오

 container.RegisterType<BaseSearchProvider>(
       new HierarchicalLifetimeManager(),  
       new InjectionFactory(c =>ExamineManager.Instance.SearchProviderCollection["Setting 1"])); 


     container.RegisterType<BaseSearchProvider>(
      new HierarchicalLifetimeManager(), 
      new InjectionFactory(c => ExamineManager.Instance.SearchProviderCollection["Setting 2"])); 

현재 foreach 유형 I는 수동으로 내 구성을 등록합니다. 다른 서비스가 있지만 일부 서비스는 첫 번째 등록을 사용해야하고 다른 서비스는 두 번째 등록을 사용해야합니까? 어떤 "프로필"을 사용하여 이것을 수행 할 수있는 방법이 있습니까?

 container.RegisterType<IMeetingSearchService>("using Setting 1") 

솔루션이 BaseSearchProvider을 상속 나는 두 가지 유형을 등록하고이 나의 모든 생성자를 적용 할 수 있도록이 유형을 등록하는 것입니다 나는 지금은 떨어져 생각할 수있는 유일한 것은, 그래서 난 돈 ' 그 선택자를 필요로하지 마라. 그러나 다른 방법이있을 수 있습니까?

답변

0

이름으로 확인하는 방법이 있습니다.

그래서 파생 된 두 가지 유형의 BaseSearchProvider가 필요합니다. 그들에게 전화하자 :

SettingsOneSearchProvider의 생성자에서 & SettingsTwoSearchProvider 이제

우리가 사용하여 올바른 설정을 얻을 얻을 수있는 'ExamineManager.Instance.SearchProviderCollection를 [ "settingsname"]'코드 두 개의 새로운 공급자.

당신에

등록 클래스는이 같은 등록에 이름을 추가 : 이제

public static T Resolve<T>(string name) 
{ 
    return container.Resolve<T>(name); 
} 

수행 할 수 있습니다

container.RegisterType<BaseSearchProvider, SettingsOneSearchProvider>("SettingsOne" 
     new HierarchicalLifetimeManager(),  
     new InjectionFactory(c =>ExamineManager.Instance.SearchProviderCollection["Setting 1"])); 


container.RegisterType<BaseSearchProvider, SettingsTwoSearchProvider>("SettingsOne" 
     new HierarchicalLifetimeManager(), 
     new InjectionFactory(c => ExamineManager.Instance.SearchProviderCollection["Setting 2"])); 

이제 우리는 이름으로 해결하기 위해 등록 클래스에서 별도의 해결 방법이 필요합니다 이 코드를 사용하여 두 가지 중 하나를 해결하십시오.

var provider = RegistationClassName.Resolve<BaseSearchProvider>("SettingsOne"); 
+0

감사합니다 ... 나중에 조금 테스트 해 보겠습니다 ... 그러나 그런 다음 두 클래스를 가져와야하는 경우, 잘 이해하면 쓸모가 없습니다. 두 클래스를 내 주입 스타일로 등록 할 수 있습니까? –

+0

공장에 등록물을 주입하는 것은 제 통제의 반대에 대한 것입니다. 이 팩토리는 사용하려는 클래스에서 해결해야합니다. 그렇기 때문에 구체적인 설정이 필요한 공장에 구체적인 수업이 필요합니다. – PolkaHard