Ninject vs Unity for DI

我们正在使用ASP.net MVC。

哪个是最好的DI框架Ninject或Unity,为什么?

上次我看着他们中的任何一个,我发现Ninject稍微好一些。 但两者都有其缺点。

Ninject有更好的stream畅configurationscheme。 Unity似乎主要依赖XMLconfiguration。 Ninject的主要缺点是它需要您在代码中的任何地方引用Ninject.Core来添加[Inject]属性。

如果我可能会问,为什么要限制你的select呢? 我认为Castle.Windsor,Autofac和StructureMap至less是一样好或者更好。

我知道这是一个古老的问题,但这是我的想法:

我个人喜欢Ninject。 我喜欢stream畅的接口和避免XML。 我一般喜欢XML,而不是这种configuration的东西。 特别是当涉及重构时,stream畅的界面使得更容易纠正。

我错过了StructureMap的ObjectFactory,但是有一些简单的解决方法可以将它添加到Ninject中。

正如Jeffery所指出的,当你只有一个构造函数时,你不必使用[Inject]属性。

我发现我更喜欢stream畅的接口,不仅仅是因为它们避免了XML,而是因为当我改变一些影响它们的东西时,它们会导致编译时错误。 XMLconfiguration没有,我不得不记得要改变我的好处。

Ninject检测循环依赖关系,如果您使用注入构造函数,而不是Unity,无论注入技术只是抛出一个非常难以debugging的StackOverflowException。

我同意Mendelt,没有“最好”的DI框架。 这只取决于情况,他们都有利有弊。 David Hayden认为在DotNet Rocks上,如果你使用EntLib的其余部分并且熟悉Unity,那么Unity是首选。 我个人使用Unity是因为我的客户喜欢这个事实,即它说的DLL上的Microsoft企业库(Unity),如果你明白我的意思。

我同时使用xmlconfiguration来设置接口和它们的具体实现,但是在注入时使用代码中的属性,如:

<type type="ILogger" mapTo="EntLibLogger"> <lifetime type="singleton"/> </type> 

并在代码中:

 [InjectionConstructor] public Repository([Dependency] ILogger logger) 

就我个人而言,我认为这会使发生的事情变得更加清楚,但是当然可以争辩说,在整个申请过程中,你会提到统一性。 随你便。