在 Ninject3 中有一个新的 .ToConstructor feature .
如前所述,它有助于强类型构造函数参数,例如:
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<>() 的语法糖,还是我还缺少其他东西?
最佳答案
第一种情况的行为类似于 To<MyService>()
除了您明确选择构造函数。这意味着上下文通过 MyService
传递您可以使用 IFoo
的条件和 IBar
或他们的依赖关系之一,在第二种情况下,您会获得 IFoo
的新上下文和 IBar
你不会知道它们被注入(inject)了MyService
.
例如
Bind<IFoo>().To<FooA>().WhenInjectedInto<MyService>();
Bind<IFoo>().To<FooB>().WhenInjectedInto<MyOtherService>();
在第二种情况下将不起作用。
关于c# - Ninject 3 中的 .ToConstructor 和 .ToMethod 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8777475/