Введите разные классы, которые реализуют один и тот же интерфейс, используя Ninject

Я реализую шаблон проектирования для построения различных типов графических объектов, которые будут отображаться в пользовательском интерфейсе WPF. Я использую Ninject в качестве контейнера IOC. Тем не менее, я пытаюсь найти элегантное расширяемое решение.

у меня естьChartDirector объект, который принимаетIChartBuilder как зависимость. у меня тоже естьTemperatureChartBuilder а такжеThresholdChartBuilder что реализоватьIChartBuilder, Я хочу ввести либоTemperatureChartBuilder ИЛИ ЖЕThresholdChartBuilder вChartDirector в зависимости от события, которое происходит или в зависимости от вызова клиента. Я проиллюстрировал мою проблему ниже в коде.

// 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);

РЕДАКТИРОВАТЬ:

В сочетании с ответом Гэри и отмечая небольшое изменение, что у ChartDirector есть другая зависимость, я теперь хочу сделать что-то вроде этого:

var director = kernel.Get<ChartDirector>().WithConstructorArgument(kernel.Get<IChartBuilder>("TemperatureChart"));

Возможно ли что-то подобное?

Ответы на вопрос(2)

Ваш ответ на вопрос