c# - 関係 - 制御の反転 メリット




主要なC#DI/IoCフレームワークはどのように比較されますか? (5)

Philip Matのこの素晴らしい.Net DIコンテナ比較ブログを読んでください。

彼はいくつかの徹底したパフォーマンス比較テストを行っています。

彼はそれが小さい、速く、使いやすいようにAutoFacを勧めます...私は同意します。 彼のテストではUnityNinjectが最も遅いようです。

神聖な戦争領域に入るリスクで、これらの一般的なDI / IoCフレームワークの長所と短所は何ですか?また、最も簡単に考えることができますか? ..:

  • 開始
  • 統一
  • Castle.Windsor
  • オートファック
  • 構造マップ

ここにリストしていない他のDI / IoCフレームワークはありますか?

私のユースケースでは、クライアントWPFアプリケーションとWCF / SQLサービスインフラストラクチャ、使いやすさ(特に明快で簡潔な構文)、一貫したドキュメント、優れたコミュニティサポート、パフォーマンスを構築しています。私の選択で

更新:

引用されたリソースや重複した質問は古くなっているように見えますが、これらのすべてのフレームワークの知識を持った人が来て、実際の洞察を提供することができますか?

私は、この主題に関するほとんどの意見が偏っている可能性があることを認識していますが、誰かがこれらの枠組みをすべて研究し、少なくとも一般的に客観的な比較をしてくれることを期待しています。

私はそれが前に行われていない場合、私自身の調査をすることを非常に喜んでいるが、これは少なくとも少数の人々がすでに行っていたものと仮定した。

2番目の更新:

複数のDI / IoCコンテナの経験がある場合は、それらの長所と短所をランク付けして要約してください。ありがとうございます。 これは、人々が作ったわかりにくい小さな容器を発見するための運動ではなく、一般的な(そしてアクティブな)フレームワークの間の比較を探しています。


linfuとspring.netを含むgoogleコードnet-ioc-frameworkの比較については、このテキストを書いている間はあなたのリストには載っていません。

私はspring.netで働いていました。これには多くの機能(aop、ライブラリ、docu、...)があり、ドットネットとjava-worldには多くの経験があります。 機能はモジュール化されているので、すべての機能を使用する必要はありません。 この機能は、データベースの抽象化、ロギングの抽象化などの一般的な問題を抽象化したものです。 しかし、IoC設定を行い、デバッグするのは難しいです。

私がこれまでに読んだことから、もし私が小規模または中規模のプロジェクトのためにchoosehをしなければならないのであれば、ioc-configurationが完了し、Cでデバッグ可能なので、ninjectを使用するでしょう。 しかし、私はまだそれと仕事をhavent。 大規模なモジュラーシステムの場合、抽象ライブラリのためにspring.netにとどまります。


この質問に対する包括的な答えは私の本の何百ものページを取り上げていますが、ここで私がまだ取り組んでいる簡単な比較表があります:


さて、私が今までに見つけた最高の比較を見てみると、

2010年3月に行われた投票でした。

私にとって興味深い点の1つは、DI / IoCフレームワークを使用していて、それを気に入っている/嫌っていた人が、StructureMapが一番上に出ているようです。

また、世論調査では、 Castle.WindsorStructureMapが最も好評を得ているようです。

興味深いことに、 UnitySpring.Netは最も一般的に嫌われている人気のあるオプションのようです。 (私はUnityを怠惰から(そしてMicrosoftのバッジ/サポート)考えていましたが、今はCastle WindsorとStructure Mapをもっと詳しく見ていきます)。

もちろんこれは2010年5月にリリースされたUnity 2.0には当てはまりません(?)。

うまくいけば、他の誰かが直接の経験に基づいて比較を提供できることを望みます。


私は別のパフォーマンスcomparison (最新のアップデート、2014年4月10日)を見つけました。 それは以下を比較する:

投稿からの簡単な要約は次のとおりです。

結論

Ninjectは間違いなく最も遅いコンテナです。

MEF、LinFu、Spring.NETはNinjectよりも速いですが、かなり遅いです。 AutoFac、Catel、Windsorが次に来て、StructureMap、Unity、LightCoreが続きます。 Spring.NETの欠点は、XMLでしか構成できないことです。

SimpleInjector、Hiro、Funq、Munq、Dynamoは最高のパフォーマンスを提供し、非常に高速です。 試してみてください!

特にシンプルなインジェクターは良い選択と思われます。 それは非常に速く、良い文書を持ち、傍受やジェネリックなデコレータなどの高度なシナリオもサポートしています。

Common Service Selector Libraryを試してみて、うまくいけば複数のオプションを試してみて、あなたに最適なものを見てみることもできます。

サイトからのCommon Service Selector Libraryについての情報:

ライブラリは、IoCコンテナとサービスロケータを抽象化しています。 ライブラリを使用すると、ハードリファレンスに頼らずにアプリケーションが間接的に機能にアクセスできるようになります。 このライブラリを使用することで、サードパーティのアプリケーションとフレームワークは、特定の実装に縛られることなく、IoC / Service Locationを活用することができます。

更新

13.09.2011: FunqMunqが参加者リストに追加されました。 チャートも更新され、パフォーマンスが悪いためSpring.NETが削除されました。

2011年4月11日:Simple Injectorを追加しました。パフォーマンスはすべての参加者の中で最高です」







ninject