2011-12-09 18 views
9

Bu soruya dayanarak: Should thoses kind of service go injected in a base class ? (versus static classes).Bağlama, Ninject kullanılarak dekoratörlerle nasıl yapılır?

Bağlama, Ninject kullanarak dekoratörlerle nasıl yapılır? veya herhangi bir 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(); 
} 

cevap

15

Bu harika cevap için örneğin

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

sayesinde koşullu bağları kullanmak zorunda. – Rushino

+2

+1 Ve bazı (çok daha nadir) durumlarda, jenerik tabanlı bir 'TImpl' kullanıyor olabilirsiniz, bu durumda '>()' a bağlayabilirsiniz. Yukarıdaki gibi () 'ye - içine enjekte edilen beton tipinin temel jenerik tipine dayanan, biraz farklı bir ".When" maddesini [kısıtlar] (https://github.com/ninject/ninject/wiki/Contextual-Binding) kullanın. Akılda tutulması gereken bir diğer yararlı şey ise, ihtiyacınız olan şeyden biraz farklı bir şeye ihtiyacınız olduğunu fark ederseniz, Ninject kaynağını bulup, bunları bulmak için dosyalar/statik analizleri bulmanızdır - örn. 'InInjectedInto' –

+0

' a bakın Sözleşmeyle çoklu bağımlılıkları yapılandırmak istediğinizde bu nasıl yapılabilir? – Rookian

İlgili konular