NInject: как передать параметры, когда Get <T>()?
Я использую прилагаемое изображение, чтобы объяснить, что я имел в виду.
-
У меня есть несколько классов, управляемых NInject. Некоторые из них имеют несколько экземпляров одноэлементных, а другие - в переходном режиме. На изображении синие прямоугольники являются синглонами, красные - переходными. Процессор зависит от других классов или экземпляров.
-
Я хочу получить экземпляр Процессора каждый раз, используя kernel.Get. Однако каждый раз, когда я хочу использовать разные значения для объектов, используемых Процессором. См. Action1 и Action2 в изображении. Код не является реальным, а просто для объяснения здесь.
Есть ли какой-либо существующий способ для удовлетворения моих потребностей? ![Pass parameters when Get]()
Ответы
Ответ 1
Вы должны иметь возможность передавать аргументы конструктора, учитывая, что ваш процессор принимает эти зависимости в качестве аргументов в конструкторе.
var foo = new Ninject.Parameters.ConstructorArgument("foo", new Foo());
var bar = new Ninject.Parameters.ConstructorArgument("bar", new Bar());
var processor = kernel.Get<IProcessor>(foo, bar);
public Processor (Foo foo, Bar bar){
this.foo = foo;
this.bar = bar;
}
Ответ 2
Использование функции OnActivation() может подключаться к событию, когда активирована зависимость.