Введите разные классы, которые реализуют один и тот же интерфейс, используя 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"));
Возможно ли что-то подобное?