2012-05-30 20 views
18

Estoy usando la imagen adjunta para explicar lo que quise decir.NInject: cómo pasar parámetros cuando obtiene <T>()?

  • tengo unas pocas clases administradas por ninject. Algunos de ellos tienen algunas instancias únicas, y otros tienen un alcance transitorio. En la imagen, los rectángulos azules son singltons, los rojos son transitorios. El procesador depende de otras clases o instancias.

  • Quiero obtener la instancia de Procesador cada vez usando kernel.Get. Sin embargo, cada vez que quiero utilizar valores diferentes para los objetos utilizados por el procesador. Ver Acción1 y Acción2 en la imagen. El código no es real, sino solo una explicación aquí.

¿Existe alguna manera de satisfacer mis necesidades? Pass parameters when Get

Respuesta

29

Debería poder pasar argumentos de constructor dado que su procesador toma esas dependencias como argumentos en el constructor.

var foo = new Ninject.Parameters.ConstructorArgument("foo", new Foo()); 
var bar = new Ninject.Parameters.ConstructorArgument("bar", new Bar()); 
var processor = kernel.Get<IProcessor>(foo, bar); 

public Processor (Foo foo, Bar bar){ 
    this.foo = foo; 
    this.bar = bar; 
} 
+1

Gracias por su respuesta. Sin embargo, creo que malinterpretaste mi pregunta. No se trata de cambiar enlaces en la fase de enlace, sino de pasar parámetros en la fase de resolución. Lo que quise decir fue cuando trato de obtener una instancia de IProcessor, cómo pasar los valores a las dependencias del procesador: las instancias de Foo y Bar. Los gráficos de objetos en las dos Acciones son los mismos, pero las propiedades de cada instancia tendrán diferentes valores. – Zach

+1

@Zach Lo siento, no entendí bien tu pregunta. Edité mi respuesta inicial. –

1

Usar la función OnActivation() puede enganchar el evento cuando se activa una dependencia.

Cuestiones relacionadas