105

ASP.netMVCを使用しています。

これらのどれが最高のDIフレームワークNinjectまたはUnityであり、その理由は何ですか?

4

5 に答える 5

47

前回それらのいずれかを調べたとき、Ninjectの方が少し優れていることがわかりました。しかし、どちらにも欠点があります。

Ninjectには、より優れた流暢な構成スキームがあります。Unityは主にXML構成に依存しているようです。Ninjectの主な欠点は、[Inject]属性を追加するために、コード内のあらゆる場所でNinject.Coreを参照する必要があることです。

私が尋ねるかもしれませんが、なぜあなたはあなたの選択をこれらの2つに制限しているのですか?Castle.Windsor、Autofac、StructureMapは少なくとも同等かそれ以上だと思います。

于 2009-06-28T12:18:01.817 に答える
47

これは古い質問だと思いますが、私の考えは次のとおりです。

個人的にはNinjectが好きです。私は流暢なインターフェイスと XML の回避が好きです。私は一般的に XML が好きですが、この種の構成は好きではありません。特にリファクタリングが含まれる場合、流暢なインターフェイスにより修正が容易になります。

StructureMap の ObjectFactory が恋しいですが、それを Ninject に追加する簡単な回避策があります。

Jeffery が指摘しているように、コンストラクターが 1 つしかない場合は [Inject] 属性を使用する必要はありません。

XML を回避するためだけでなく、それらに影響を与える何かを変更するとコンパイル時にエラーが発生するため、流暢なインターフェイスを好むことがわかりました。XML 構成はそうではなく、変更を覚える必要が少ないほど、私はうまくいきます。

于 2010-03-05T15:02:58.300 に答える
9

私はメンデルトに同意します。「最良の」DIフレームワークはありません。それは状況によって異なり、すべてに長所と短所があります。DavidHaydenがDotNetRocksで、EntLibの残りの部分を使用し、それに精通している場合はUnityが推奨される選択肢であると述べたと思います。私が個人的にUnityを使用しているのは、私が言っていることを理解できれば、DLLにMicrosoft Enterprise Library(Unity)と書かれているという事実を顧客が気に入っているからです。

インターフェイスとその具体的な実装を設定するために両方のxml構成を使用しますが、挿入するときにコードで次のような属性を使用します。

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

およびコード内:

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

個人的には、それによって何が起こるかが明確になると思いますが、もちろん、アプリケーション全体でUnityへの参照があると主張することもできます。それはあなた次第です。

于 2009-07-01T10:50:31.740 に答える