1)有没有办法让Ninject在代码中选择一个特定的构造函数而不是应用InjectAttribute
?
2)另外,我如何为构造函数的这些参数提供值?
3)我可以在解析或创建对象时覆盖这些参数值,即当我调用kernel.Get<T>()
时?
答案 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));