2011-09-04 5 views
4

데이터를 가져 오는 인터페이스와 그 구현을 가정 해 보겠습니다.Castle Windsor에서 인터페이스의 중첩 구현을 사용하려면 어떻게해야합니까?

interface IResourceProvider 
{ 
    string Get(Uri uri); 
} 

class HttpResourceProvider : IResourceProvider 
{ 
    public string Get(Uri uri) 
    { 
    // Download via HTTP. 
    } 
} 

다음과 같이 Castle Windsor에 등록 할 수 있습니다.

container.Register 
    (Component.For<IResourceProvider>().ImplementedBy<HttpResourceProvider>() 
); 

(모두 괜찮습니다).

다음과 같이 캐싱 구현을 원한다면 xxx59

class CachingResourceProvider : IResourceProvider 
{ 
    public CachingResourceProvider(IResourceProvider resourceProvider) 
    { 
    _resourceProvider = resourceProvider; 
    } 

    public string Get(Uri uri) 
    { 
    // Return from cache if it exists. 
    // Otherwise use _resourceProvider and add to cache. 
    } 

    private readonly IResourceProvider _resourceProvider; 
} 

이 중첩 된 종속성은 어떻게 등록합니까? 즉, IResourceProviderCachingResourceProvider에 의해 구현된다는 것을 말하고 싶습니다. 생성자에서 HttpResourceProvider이있는 곳을 제외하고 말입니다.

답변

5

그냥 CachingResourceProviderHttpResourceProvider 전에 등록 - 예를

container.Register(Component 
    .For<IResourceProvider>() 
    .ImplementedBy<CachingResourceProvider>()); 
container.Register(Component 
    .For<IResourceProvider>() 
    .ImplementedBy<HttpResourceProvider>()); 

BTW - 이는 Decorator 디자인 패턴으로 알려져 있습니다.

+0

전혀 모호하지 않습니다 ... –

관련 문제