Я реализую шаблон проектирования построителя для построения различных видов объектов графа, которые будут отображаться в интерфейсе WPF. Я использую Ninject как контейнер IOC. Тем не менее, я пытаюсь найти элегантное расширяемое решение.
У меня есть объект ChartDirector
, который принимает IChartBuilder
как зависимость. У меня также есть TemperatureChartBuilder
и ThresholdChartBuilder
, которые реализуют IChartBuilder
. Я хочу добавить либо TemperatureChartBuilder
OR 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);
EDIT:
В сочетании с ответом Гэри и отмечая небольшое изменение, что ChartDirector имеет другую зависимость, теперь я хочу сделать что-то вроде этого:
var director = kernel.Get<ChartDirector>().WithConstructorArgument(kernel.Get<IChartBuilder>("TemperatureChart"));
Возможно ли подобное?