Con Ninject, ¿cómo se configura el kernel para que pueda definir qué valores del constructor están pasando en la creación de instancias de un objeto?Ninject que pasa en los valores del constructor
Tengo el siguiente configurado en un módulo:
Bind<IService1>()
.To<Service1Impl>()
.InSingletonScope()
.Named("LIVE");
Bind<IService2>()
.To<Service2Impl>()
.InSingletonScope()
.Named("LIVE")
.WithConstructorArgument(
"service1",
Kernel.Get<IService1>("LIVE"));
Service2Impl toma un parámetro de constructor IService1 pero quiero que esto viene del contenedor. También quiero tener enlaces con nombre ya que mi código se orientará a diferentes versiones en tiempo de ejecución.
Esto parece funcionar pero ¿es la manera correcta de lograr lo que quiero hacer? ¿Debo estar logrando sin el uso de enlaces nombrados y cableando diferentes módulos de configuración en el kernel?
EDITAR
He utilizado el método ToMethod() ahora para especificar un delegado para llamar a petición de un tipo específico. Esto parece un poco más agradable ya que obtendré advertencias de tiempo de compilación si la configuración del constructor es incorrecta en lugar de tener que saber el nombre del parámetro que estoy pasando primero.
Gracias
Mucho prefiero esta sintaxis a .WithConstructorArgument, el compilador capta los errores de refactorización. +1 – gb2d
¿Tenía en serio una aplicación que solicitara una interfaz de arma y un objeto de espada? – starmandeluxe