Какая разница между .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 < > () или есть что-то еще, что мне не хватает?
Ответы
Ответ 1
Первый случай ведет себя как To<MyService>()
, за исключением того, что вы явно выбираете конструктор. Это означает, что контекст передается через MyService
, и вы можете использовать условия для IFoo
и IBar
или одну из своих dpependencies, где во втором случае вы получаете новый контекст для IFoo
и IBar
, и вы не будете знайте, что они впрыскиваются в MyService
.
например.
Bind<IFoo>().To<FooA>().WhenInjectedInto<MyService>();
Bind<IFoo>().To<FooB>().WhenInjectedInto<MyOtherService>();
не будет работать во втором случае.