Injete classes diferentes que implementam a mesma interface usando o Ninject
Estou implementando o padrão de design do construtor para construir diferentes tipos de objetos gráficos a serem exibidos em uma interface do usuário do WPF. Estou usando o Ninject como meu contêiner de COI. No entanto, estou tentando encontrar uma solução extensível e elegant
Eu tenho umChartDirector
objeto que recebe umIChartBuilder
como uma dependência. Eu também tenhoTemperatureChartBuilder
eThresholdChartBuilder
que implementamIChartBuilder
. Eu quero injetarTemperatureChartBuilder
ORThresholdChartBuilder
paraChartDirector
, dependendo de um evento que foi disparado ou dependendo de uma chamada do cliente. Ilustrei meu problema abaixo no 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
Acoplado à resposta de Gary, e notando uma ligeira edição de que o ChartDirector tem outra dependência, agora quero fazer algo assim:
var director = kernel.Get<ChartDirector>().WithConstructorArgument(kernel.Get<IChartBuilder>("TemperatureChart"));
É algo assim possível?