ASP.netMVCを使用しています。
これらのどれが最高のDIフレームワークNinjectまたはUnityであり、その理由は何ですか?
ASP.netMVCを使用しています。
これらのどれが最高のDIフレームワークNinjectまたはUnityであり、その理由は何ですか?
前回それらのいずれかを調べたとき、Ninjectの方が少し優れていることがわかりました。しかし、どちらにも欠点があります。
Ninjectには、より優れた流暢な構成スキームがあります。Unityは主にXML構成に依存しているようです。Ninjectの主な欠点は、[Inject]属性を追加するために、コード内のあらゆる場所でNinject.Coreを参照する必要があることです。
私が尋ねるかもしれませんが、なぜあなたはあなたの選択をこれらの2つに制限しているのですか?Castle.Windsor、Autofac、StructureMapは少なくとも同等かそれ以上だと思います。
これは古い質問だと思いますが、私の考えは次のとおりです。
個人的にはNinjectが好きです。私は流暢なインターフェイスと XML の回避が好きです。私は一般的に XML が好きですが、この種の構成は好きではありません。特にリファクタリングが含まれる場合、流暢なインターフェイスにより修正が容易になります。
StructureMap の ObjectFactory が恋しいですが、それを Ninject に追加する簡単な回避策があります。
Jeffery が指摘しているように、コンストラクターが 1 つしかない場合は [Inject] 属性を使用する必要はありません。
XML を回避するためだけでなく、それらに影響を与える何かを変更するとコンパイル時にエラーが発生するため、流暢なインターフェイスを好むことがわかりました。XML 構成はそうではなく、変更を覚える必要が少ないほど、私はうまくいきます。
私はメンデルトに同意します。「最良の」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への参照があると主張することもできます。それはあなた次第です。