Привязка Ninject Constructor

Я использую NInject. У меня есть такой объект

interface IFoo {}

class Foo : IFoo {
   public Foo(string magic, IBar bar) {}
}

Я хочу быть в состоянии ввести немного фу, передавая только магию. Магия различна для каждого класса, поэтому она должна возвращать разные экземпляры.

s_Kernel.Get<IFoo>("magic");
s_Kernel.Get<IFoo>("not-so-magic");

Первый раз, когда я пытался связать это, я сделал

s_Kernel.Bind<IFoo>().To<Foo>();

Но тогда я должен искать это с чем-то, что выглядит немного невежливо.

s_Kernel.Get<IFoo>(new ConstructorArgument("magic", magic), s_Kernel.Get<IBar>());

Я не хочу явно привязывать себя к волшебной струне.

У меня сложилось впечатление, что Bind<IFoo>().ToConstructor(ctorArg => new Foo(xxx, ctorArg.Kernel.Get<IFoo>()); почти доставит меня туда, но я не знаю, что я должен поставить для "ххх", чтобы он нашел аргумент.

1 ответ

Решение

Вы либо ищете Ninject.Extensions.Factory (или WithConstructorArgument кусок в самом конце Bind цепочка беглых выражений, но я уверен, что вы не это имеете в виду).

Другие вопросы по тегам