Подтвердить что ты не робот

NInject: как передать параметры, когда Get <T>()?

Я использую прилагаемое изображение, чтобы объяснить, что я имел в виду.

  • У меня есть несколько классов, управляемых NInject. Некоторые из них имеют несколько экземпляров одноэлементных, а другие - в переходном режиме. На изображении синие прямоугольники являются синглонами, красные - переходными. Процессор зависит от других классов или экземпляров.

  • Я хочу получить экземпляр Процессора каждый раз, используя kernel.Get. Однако каждый раз, когда я хочу использовать разные значения для объектов, используемых Процессором. См. Action1 и Action2 в изображении. Код не является реальным, а просто для объяснения здесь.

Есть ли какой-либо существующий способ для удовлетворения моих потребностей? Pass parameters when Get

4b9b3361

Ответ 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() может подключаться к событию, когда активирована зависимость.