Inject diferentes clases que implementan la misma interfaz usando Ninject
Estoy implementando el patrón de diseño del constructor para construir diferentes tipos de objetos gráficos que se mostrarán en una interfaz de usuario de WPF. Estoy usando Ninject como mi contenedor de COI. Sin embargo, estoy tratando de encontrar una solución extensible elegante.
Tengo unChartDirector
objeto que toma unaIChartBuilder
como una dependencia. Tambien tengoTemperatureChartBuilder
yThresholdChartBuilder
que implementanIChartBuilder
. Quiero inyectar cualquieraTemperatureChartBuilder
OThresholdChartBuilder
aChartDirector
según un evento que se active o según una llamada del cliente. He ilustrado mi problema a continuación en el código.
// ChartDirector also depends on this
kernel.Bind<IExample>().To<Example>();
// when called in Method X...
kernel.Bind<IChartBuilder>().To<TemperatureChartBuilder>();
// when called in Method Y...
kernel.Bind<IChartBuilder>().To<ThresholdChartBuilder();
// TemperatureChartBuilder is a dependency of ChartDirector, need a way to dynamically
// allocate which binding to use.
var director = kernel.Get<ChartDirector>();
// without Ninject I would do
var director = new ChartDirector(new TemperatureChartBuilder);
// or
var director = new ChartDirector(new ThresholdChartBuilder);
EDITAR
Parecido con la respuesta de Gary, y notando una ligera edición de que ChartDirector tiene otra dependencia, ahora quiero hacer algo como esto:
var director = kernel.Get<ChartDirector>().WithConstructorArgument(kernel.Get<IChartBuilder>("TemperatureChart"));
¿Es posible algo como esto?