我们使用ASP.net MVC。

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

有帮助吗?

解决方案

我最后一次看着它们中的我发现Ninject略胜一筹。但两者都具有它们的缺点。

Ninject具有更好的流利的配置方案。团结似乎主要依赖于XML配置。 Ninject的主要缺点是,它需要你到处引用Ninject.Core在你的代码中加入[进样]属性。

如果我会问,你为什么要限制你的选择,这两个?我认为Castle.Windsor,Autofac和StructureMap至少一样好或更好。

其他提示

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

我个人喜欢Ninject。我喜欢流畅的接口,避免XML的。我一般喜欢XML,只是不适合这种配置的东西。尤其重构涉及当流利接口使其更容易纠正。

我错过StructureMap的ObjectFactory的,但也有容易的解决方法将它添加到Ninject。

由于杰弗里指出,不必使用[进样]属性,当你只有一个构造函数。

我发现我更喜欢流畅的界面不仅是因为他们避免XML,而是因为它们会导致当我改变的东西,影响到他们的编译时错误。 XML配置不和的少我要的记住的改变更好的我。

如果使用注射构造,而不是统一的是不管注射技术只是抛出一个StackOverflowException这是非常难以调试

Ninject检测循环依赖。

我同意Mendelt,没有“最好的” DI框架。这只是取决于局势,他们都各有利弊。认为大卫·海登DOTNET的岩石团结是首选,如果你使用的EntLib的休息和熟悉该说。我个人使用统一,因为我的客户喜欢,它说的微软的DLL文件企业库(统一),如果你得到了什么I'm说。

的事实

我同时使用两个XML配置用于建立的接口和它们的具体实施方案,而是然后在我代码注入时使用的属性,如:

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

和在代码:

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

我个人认为这使得它更清楚发生了什么,但当然有人会说,你将不得不在你的应用程序的统一引用。程式时,你。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top