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