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

Какая разница между .ToConstructor и .ToMethod в Ninject 3?

В Ninject3 есть новая функция .ToConstructor.

Как описано, это помогает аргументировать конструктор с сильным типом, например:

Bind<IMyService>().ToConstructor(
    ctorArg => new MyService(ctorArg.Inject<IFoo>(), ctorArg.Inject<IBar>()));

В чем разница между использованием .ToConstructor и .ToMethod почти таким же образом:

Bind<IMyService>().ToMethod(
    x => new MyService(x.Kernel.Get<IFoo>(), x.Kernel.Get<IBar>()));

Является ли это просто синтаксическим сахаром, чтобы избежать использования Kernel.Get < > () или есть что-то еще, что мне не хватает?

4b9b3361

Ответ 1

Первый случай ведет себя как To<MyService>(), за исключением того, что вы явно выбираете конструктор. Это означает, что контекст передается через MyService, и вы можете использовать условия для IFoo и IBar или одну из своих dpependencies, где во втором случае вы получаете новый контекст для IFoo и IBar, и вы не будете знайте, что они впрыскиваются в MyService.

например.

Bind<IFoo>().To<FooA>().WhenInjectedInto<MyService>();
Bind<IFoo>().To<FooB>().WhenInjectedInto<MyOtherService>();

не будет работать во втором случае.