什么';这就是Ninject3中.ToConstructor和.ToMethod之间的区别

本文关键字:ToConstructor ToMethod 之间 区别 Ninject3 什么 | 更新日期: 2023-09-27 18:19:54

在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<>()还是我还缺少什么?

什么';这就是Ninject3中.ToConstructor和.ToMethod之间的区别

除了显式选择构造函数之外,第一种情况的行为与To<MyService>()类似。这意味着上下文是通过MyService传递的,您可以使用IFooIBar的条件或它们的一个依赖项,在第二种情况下,您将获得IFooIBar的新上下文,但您将不知道它们被注入到MyService中。

例如

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

在第二种情况下将不起作用。