如何让Ninject选择一个特定的构造函数而不使用InjectAttribute?

时间:2016-02-10 06:43:22

标签: ninject

1)有没有办法让Ninject在代码中选择一个特定的构造函数而不是应用InjectAttribute

2)另外,我如何为构造函数的这些参数提供值?

3)我可以在解析或创建对象时覆盖这些参数值,即当我调用kernel.Get<T>()时?

1 个答案:

答案 0 :(得分:1)

ToConstructor绑定方法:

Bind<IMyService>().ToConstructor(
    ctorArg => new MyService(ctorArg.Inject<IFoo>()));

您可以使用3种机制指定绑定值:

  • 为依赖项(Bind<IFoo>().To<Foo>()
  • 创建绑定
  • 指定构造函数参数(在绑定的末尾添加WithConstructorArgument(typeof(IFoo), new Foo())
  • 如果我没记错的话,你也可以用ToConstructor语法指定ToConstructor(ctorArg => new MyService(myFoo));

(另见http://www.planetgeek.ch/2011/05/28/ninject-constructor-selection-preview/

您可以通过传递ConstructorArgument或者TypeMatchingConstructorArgument(或某个自定义IParameter)来确定解决方案的值:

IResolutionRoot.Get<IMyService>(new TypedConstructorArgument(
    typeof(IFoo),
    (ctx, target) => myFooInstance));