是否可以使用Ninject在实例化新类时省略参数?

时间:2015-08-13 16:11:51

标签: ninject

要使用Ninject,我可以执行以下操作

var kernal = new StandardKernel();
kernal.Load(Assembly.GetExecutingAssembly());
var thing = new ThingThatNeedsAWarrior(kernal.Get<IWarrior>());

但使用Ninject可以在实例化新类时省略参数吗?

var thing = new ThingThatNeedsAWarrior();

当构造函数签名为

public ThingThatNeedsAWarrior(IWarrior warrior)

1 个答案:

答案 0 :(得分:2)

ninject对new没有影响。这个想法是你的内核实例化东西,如:

var thing = kernel.Get<ThingThatNeedsAWarrior>();

然后你不需要指定参数。 Ninject将选择具有最多知道如何解析的参数的构造函数。

为了更进一步,理想情况下,在应用程序中配置内核,然后执行以下操作:

var applicationRoot = kernel.Get<ApplicationRoot>();

并将appplication的所有对象一次性实例化(作为ApplicationRoot的依赖项)。

Mark Seeman还有一篇关于DI / CompositionRoot配置位置/方式的博客文章。他还有更多关于DI容器使用的内容。

(感谢@ NighOwl888进行更正)。