2011-12-09 3 views
9

この質問に基づいて:Should thoses kind of service go injected in a base class ? (versus static classes)Ninjectを使用してデコレータでバインディングを行う方法は?

Ninjectを使用してデコレータでバインディングを行う方法を教えてください。または任意のDIContainerですか?

public class CachedLoggedRepository : IRepository 
{ 
    public IRepository repository { get; set; } 
    void Add(); 
} 

public class CachedRepository : IRepository 
{ 
    public IRepository repository { get; set; } 
    void Add(); 
} 

public class Repository : IRepository 
{ 
    void Add(); 
} 

答えて

15

あなたがこの素晴らしい答えを例えば

Bind<IRepository>().To<Repository>().WhenInjectedInto<CachedRopsitory>(); 
Bind<IRepository>().To<CachedRepository>().WhenInjectedInto<CachedLoggedRepository>(); 
Bind<IRepository>().To<CachedLoggedRepository>(); 
+1

おかげで、条件付きバインディングを使用する必要があります。 – Rushino

+2

+1また、いくつかのケースでは、ジェネリックベースの 'TImpl'を使用しているかもしれません。この場合、' Bind >()。To() 'のように - 注入される具体的な型の基本ジェネリック型に基づいて[constrains](https://github.com/ninject/ninject/wiki/Contextual-Binding)というわずかに異なる '.When' ...節を使用してください。あなたが必要とするものとは少し異なるものが必要な場合は、Ninjectのソースを入手して、ファイル/静的ファイルを検索して例を見つけることができます。 'WhenInjectedInto'を見てください –

+0

慣例によって複数の依存関係を設定するにはどうすればいいですか? – Rookian

関連する問題