2012-01-18 13 views
30

decir: Yo he dicho clases jerarquía:inyección de dependencias Ninject con el patrón decorador

public interface IRepository { } 

public class SomeSimpleRepository : IRepository {} 

Ahora quiero "decorar" SomeSimpleRepository con funciones adicionales

public class MoreAdvancedRespository : IRepository 
{ 
    private readonly IRepository _originalRepository; 

    public MoreAdvancedRespository(IRepository original) 
    { } 
} 

Después de un tiempo otro ..

public class TrickyRepository : IRepository 
{ 
    private readonly IRepository _originalRepository; 

    public TrickyRepository (IRepository original) 
    { } 
} 

Ahora, tengo que cumplir el enlace. En la aplicación, necesito la instancia de TrickyRepository, que se inicializará con MoreAdvancedRespository. Por lo tanto, tengo que escribir algo como:

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

Aquí estoy confundido, necesito alguna manera de decir, tomar MoreAdvancedRespository pero inicializarlo con SomeSimpleRepository. Este es un tipo de cadena de dependencias que debe resolverse contra una interfaz.

¿Alguien tiene alguna sugerencia sobre esto?

+1

posible duplicado de [¿Cómo se realiza la unión con los decoradores utilizando Ninject?] (Http://stackoverflow.com/questions/8447037/how-the-binding-are-done-with-decorators-using-ninject) –

+2

Posible duplicado de [¿Cómo se realiza la unión con decoradores utilizando Ninject?] (Https://stackoverflow.com/questions/8447037/how-the-binding-are-done-with-decorators-using-ninject) – NightOwl888

Respuesta

40

Uso WhenInjectedInto:

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

Ver this blog post para obtener más información.

+0

esto es exactamente lo que necesito –

Cuestiones relacionadas