2011-09-04 26 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>()); 

BTW - これはDecoratorデザインパターンとして知られています。

+0

まったくあいまいではありません... –

関連する問題