ASP.net MVCを使用しています。
どれが最良のDIフレームワークNinjectまたはUnityであり、それはなぜですか?
ASP.net MVCを使用しています。
どれが最良の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フレームワークはありません。それは単に状況に依存し、彼らはすべて長所と短所を持っています。EntLibの残りの部分を使用していて、それに慣れている場合は、Unityが推奨される選択肢であるとDavid HaydenがDotNet Rocksで述べたと思います。私がUnityを個人的に使用しているのは、私の顧客がDLLでMicrosoft Enterprise Library(Unity)と言っていることを気に入っているからです。
インターフェイスとその具体的な実装をセットアップするために両方のxml構成を使用しますが、次に、注入時にコードで次のような属性を使用します。
<type type="ILogger" mapTo="EntLibLogger">
<lifetime type="singleton"/>
</type>
そしてコードで:
[InjectionConstructor]
public Repository([Dependency] ILogger logger)
個人的には何が起こるかがより明確になると思いますが、もちろん、アプリケーション全体で統一への参照があると主張することもできます。それはあなた次第です。
http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison
Unityは高速ですが、最高ではありません