要使用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)
答案 0 :(得分:2)
ninject对new
没有影响。这个想法是你的内核实例化东西,如:
var thing = kernel.Get<ThingThatNeedsAWarrior>();
然后你不需要指定参数。 Ninject将选择具有最多知道如何解析的参数的构造函数。
为了更进一步,理想情况下,在应用程序中配置内核,然后执行以下操作:
var applicationRoot = kernel.Get<ApplicationRoot>();
并将appplication的所有对象一次性实例化(作为ApplicationRoot
的依赖项)。
Mark Seeman还有一篇关于DI / CompositionRoot配置位置/方式的博客文章。他还有更多关于DI容器使用的内容。
(感谢@ NighOwl888进行更正)。