2010-11-25 3 views
0

인데, 인터페이스는 ICachingManager입니다. 이제 구현이 하나 있습니다. 그때 나는 쉽게, 유니티와 CachingManager 클래스를 등록 할 수 있습니다 자동으로 유니티 해결하고 ICachingManager를 주입, 하나의 구현했다 경우유니티에 복합 클래스 등록하기. 내 구현에는

public class CachingManager 
{ 
    #region Members 
    private ICachingManager service; 
    #endregion 

    #region Constructors 
    public CachingManager(ICachingManager service) 
    { 
     this.service = service; 
    } 
    #endregion 

    #region Public Methods 
    public void EnCache<T>(string key, T value) 
    { 
     this.service.EnCache<T>(key, value); 
    } 

    public T DeCache<T>(string key) 
    { 
     return this.service.DeCache<T>(key); 
    } 
    #endregion 
} 

: 나는 또한 관리자 클래스를 만들었습니다.

명명 된 유형을 사용하는 구현이 두 개 이상인 경우 Unity를 어떻게 사용할 수 있습니까? 초기화 할 이름 지정 유형을 결정하기 위해 추상 팩토리를 사용해야합니까?

그런 복합 클래스를 사용하거나 인터페이스의 구현을 Abstract Factory로 직접 사용하는 것이 좋은가요?

답변

0

추상 팩토리를 만들 필요가 없습니다. 당신은 주어진라는 이름의 구현을 주입 할 수

public class MyClient 
{ 
    [Dependency("NamedManager")] 
    public ICachingManager CachingManager { get; set; } 

    // or in the constructor 
    public MyClient([Dependency("NamedManager")] ICachingManager cachingManager) { 
     // ... 
    } 
} 

을하거나 같은 일을 할 수있는 용기 구성 할 수 있습니다 :) ONOF

public class MyClient 
{ 
    public MyClient(ICachingManager cachingManager) { 
     // ... 
    } 
} 
... 
void ContainerBuilder() { 
    ... 
    Container.RegisterType<MyClient>(
     new InjectionConstructor(
      new ResolvedParameter<ICachingManager>("NamedManager"))); 
    ... 
} 
+0

감사합니다. 컴파일 시간에 이름을 모르겠다면 설정 파일에서 이름을 읽은 다음 공장이 필요합니까? 한 가지 더, Uinty 2.0을 인터페이스를 구현하지 않는 유형으로 구성하는 방법을 살펴 보려고합니다. 설정 파일의 구문은 무엇입니까? 고마워요. – Bill

+0

1) 런타임에 종속성의 이름이 주어지면 실행시 변경 될 수있는 팩토리가 필요합니다. 2) 유형을 등록하십시오. "mapTo"속성은 필요하지 않습니다. http://msdn.microsoft.com/en-us/library/ff660914(v=PandP.20).aspx#config_registerelement – onof

+0

Onof를 참조하십시오! DI 및 공장에서 아이디어가 명확 해짐;) 감사합니다. – Bill

관련 문제