ninject привязка делегата к методу как к одиночке - PullRequest
1 голос
/ 13 октября 2011

Я пытаюсь привязать Func к реализации IService (Service1).Service1 принимает предоставленный IFormatter в качестве параметра.Тип, запрашивающий Service1, будет предоставлять экземпляр средства форматирования (поэтому я использую Func вместо простого старого IService. Это то, что я сделал до сих пор:

Bind<Func<IFormatter, IService>>()
    .ToMethod(context => formatter => 
        context.Kernel.Get<Service1>(new Parameter("formatter", formatter, false)));

Bind<Service1>().ToSelf().InSingletonScope();

.Инъекция зависимости IFormatter в форматировщик параметров конструктора типа Service1 ".

как я могу достичь единственного значения Service1 и позволить вызывающему типу обеспечивать зависимость IFormatter?

Bind<Func<IFormatter, IService>>()
    .ToMethod(context => formatter => new Service1(formatter))
    .InSingletonScope();

однако возвращенный экземпляр Service1 не является единичным. Возможно ли это?

1 Ответ

3 голосов
/ 13 октября 2011

Вы должны использовать ConstructorArgument вместо Parameter.

Кроме того, я бы переосмыслил ваш дизайн. Я думаю, что-то не так с этим. Если вы дважды вызовете Func с разными экземплярами форматера, вы не получите то, что ожидаете во второй раз, если услуга является одноэлементной. Скорее всего, лучше использовать условную привязку для IFormatter, чем передавать ее службе, используя аргумент конструктора.

...