C# 什么';Ninject 3中.ToConstructor和.ToMethod的区别是什么?

C# 什么';Ninject 3中.ToConstructor和.ToMethod的区别是什么?,c#,ninject,C#,Ninject,在Ninject 3中有一个新的 如上所述,它有助于强类型构造函数参数,如: Bind<IMyService>().ToConstructor( ctorArg => new MyService(ctorArg.Inject<IFoo>(), ctorArg.Inject<IBar>())); Bind().ToConstructor( ctorArg=>newmyservice(ctorArg.Inject(),ctorArg.Inject(

在Ninject 3中有一个新的

如上所述,它有助于强类型构造函数参数,如:

Bind<IMyService>().ToConstructor(
    ctorArg => new MyService(ctorArg.Inject<IFoo>(), ctorArg.Inject<IBar>()));
Bind().ToConstructor(
ctorArg=>newmyservice(ctorArg.Inject(),ctorArg.Inject());
以几乎相同的方式使用.ToConstructor和.ToMethod的实际区别是什么:

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

这只是避免使用Kernel.Get()的一种语法糖,还是我缺少了更多的东西?

第一种情况的行为类似于
to()
,只是您显式选择了构造函数。这意味着上下文将通过
MyService
传递,您可以使用
IFoo
IBar
的条件或它们的一个dpependency,在第二种情况下,您将获得
IFoo
IBar
的新上下文,您将不知道它们被注入
MyService

e、 g

Bind().To().whenInjectedTo();
当对象为()时,将()绑定到();

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

如果有两个构造函数具有相同的参数名和不同的类型,则选择构造函数非常有用,在这种情况下,Ninject将抛出异常。例如
Foo(int x)
Foo(string x)
可能还值得一提的是,您使用Inject方法来保持服务上下文,例如
ToConstructor(x=>new FooA(x.Inject())
而不是
x.context.Kernel.Get
注意:
Get
是一种扩展方法,您必须
使用Ninject以使其工作。我花了一分钟的时间,因为直到现在,我还没有使用Ninject.Modulesl(代码)
Bind<IFoo>().To<FooA>().WhenInjectedInto<MyService>();
Bind<IFoo>().To<FooB>().WhenInjectedInto<MyOtherService>();