2012-01-18 28 views
30

powiedzmy, mam taką hierarchię klas:Ninject wtrysk zależność z Dekorator wzór

public interface IRepository { } 

public class SomeSimpleRepository : IRepository {} 

teraz chcę "ozdobić" SomeSimpleRepository z dodatkowymi funkcjami

public class MoreAdvancedRespository : IRepository 
{ 
    private readonly IRepository _originalRepository; 

    public MoreAdvancedRespository(IRepository original) 
    { } 
} 

Po chwili inny ..

public class TrickyRepository : IRepository 
{ 
    private readonly IRepository _originalRepository; 

    public TrickyRepository (IRepository original) 
    { } 
} 

Teraz muszę wykonać wiązanie. W aplikacji potrzebuję instancji TrickyRepository, która ma zostać zainicjowana za pomocą MoreAdvancedRespository. Tak, muszę napisać coś takiego:

Bind<IRepository>().To<TrickyRepository>.With ?? 

Tutaj jestem zdezorientowany, muszę jakoś powiedzieć, wziąć MoreAdvancedRespository ale go zainicjować z SomeSimpleRepository. Jest to rodzaj łańcucha zależności, które muszą zostać rozwiązane dla jednego interfejsu.

Czy ktoś ma sugestie w tej sprawie?

+1

możliwy duplikat [W jaki sposób powiązanie jest wykonywane z dekoratorami za pomocą programu Ninject?] (Http://stackoverflow.com/questions/8447037/how-the- binding-are-done-d-decorators-using-ninject) –

+2

Możliwy duplikat [W jaki sposób powiązanie jest wykonywane z dekoratorami za pomocą programu Ninject?] (Https://stackoverflow.com/questions/8447037/how-the- binding-are-done-with-decorators-using-ninject) – NightOwl888

Odpowiedz

40

Zastosowanie WhenInjectedInto:

Bind<IRepository>().To<MoreAdvancedRespository> 
        .WhenInjectedInto<TrickyRepository>(); 
Bind<IRepository>().To<SomeSimpleRepository> 
        .WhenInjectedInto<MoreAdvancedRespository>(); 

Zobacz this blog post aby uzyskać więcej informacji.

+0

to jest dokładnie czego potrzebuję –