2011-09-04 79 views
4

假設我有獲取數據的接口,以及它的實現:如何在Castle Windsor中使用嵌套的接口實現?

interface IResourceProvider 
{ 
    string Get(Uri uri); 
} 

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

我可以在這個溫莎城堡如下注冊:

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

(這是所有罰款)。

如果我再決定我需要一個緩存實現如下:

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>()); 

順便說一句 - 這是知道的Decorator設計模式。

+0

根本不含糊...... –

相關問題