c# - Ninject 3 中的 .ToConstructor 和 .ToMethod 有什么区别?

标签 c# ninject

在 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/

相关文章:

c# - 如何防止 Debug.Assert(...) 显示模态对话框

c# - 如何使用 Ninject 扫描通用类型的所有实现

c# - 属性(property)注入(inject)是否被认为是不好的?

c# - sqlite 在 C# 中比较时间戳和 DateTime

c# - StackExchange.Redis 和 ServiceStack.Redis 的区别

c# - 带有 Ninject 的 WPF 应用程序

c# - Ninject 内核工厂 : Good Idea or Not

c# - 如何更改 Ninject 中现有绑定(bind)的范围

c# - 使用计时器/任务/后台 worker 的数据采集循环

c# - 如何取消屏蔽密码文本框并将其屏蔽回密码?