どの.NET Dependency Injectionフレームワークを検討する価値がありますか?[閉まっている]


386

どのC#/。NET依存性注入フレームワークを調査する価値がありますか?そして、あなたはそれらの複雑さとスピードについて何と言えますか?


13
IoCコンテナベンチマーク-パフォーマンス比較には、20以上の製品のパフォーマンスと機能の比較表があり、それらを最新の状態に保ちます。Simple Injectorを
Michael Freidgeim 2013年

Ninject&Maestroに感謝します。最高評価の回答がNinjectを「絶対的な喜び」と見なしていることに満足しています
Razvan Dumitru

6
IoCコンテナーを調べる前に、コンテナーなしで管理する必要があることを強調しておきます。配線と注入を手動で行います。実際に複雑なシステムや大規模なシステムがない限り、それは実際には複雑ではなく、多くのコードを必要としません。あなたがそれを理解し、それがより面白くなっていると感じたとき、あなたはどんな種類のフレームワークがあなたを助けるのかを理解するのによりよく適合するでしょう。しかし、DIを適切に実行できるようにするためだけに、プロジェクトにIoCコンテナーがなければならないというルールはありません。
サラ

1
なしから始めます。必要なオブジェクトグラフを手動で作成します。異なるフレームワークには、ニーズに応じた異なるアプローチがあります。1つを選択する前に、最も必要な機能を認識する必要があります。
Fabio

dotnetcoreは未来なので、組み込みのDIサポートをそのまま使用することもできます。それは非常によく、高度にカスタマイズ可能です。
ATL_DEV

回答:


339

編集(作成者ではありません):IoCフレームワークの包括的なリストがhttps://github.com/quozd/awesome-dotnet/blob/master/README.md#iocにあります

  • キャッスルウィンザー -キャッスルウィンザーは、.NETおよびSilverlightで利用可能な最高のブライドで成熟したコントロールコンテナーの反転
  • Unity-コンストラクター、プロパティ、およびメソッド呼び出し注入をサポートする軽量で拡張可能な依存性注入コンテナー
  • Autofac-中毒性のある.NET IoCコンテナー
  • DryIoc-シンプルで高速なすべての機能を備えたIoCコンテナー。
  • Ninject-.NET依存関係インジェクターの忍者
  • StructureMap-.NetのオリジナルIoC / DIコンテナー
  • Spring.Net-Spring.NETは、エンタープライズ.NETアプリケーションの構築を容易にするオープンソースアプリケーションフレームワークです。
  • LightInject-超軽量IoCコンテナー
  • Simple Injector -Simple Injectorは、Silverlight 4 +、Windows Phone 8、Windows 8(ユニバーサルアプリとMonoを含む)をサポートする.NET 4+用の使いやすいDependency Injection(DI)ライブラリです。
  • Microsoft.Extensions.DependencyInjection-ASP.NET CoreアプリケーションのデフォルトのIoCコンテナー。
  • Scrutor -Microsoft.Extensions.DependencyInjectionのアセンブリスキャン拡張機能。
  • VS MEF -Visual Studioで使用されるManaged Extensibility Framework(MEF)実装。
  • TinyIoC-小規模プロジェクト、ライブラリー、初心者向けの使いやすい、手間のかからない、コントロールコンテナーの反転。

元の答えは次のとおりです。


ここでは少しうるさいかもしれませんが、DI(依存性注入)はプログラミングパターンであり、IoC(制御の反転)フレームワークによって促進されますが、必須ではないことに注意することが重要です。IoCフレームワークはDIをはるかに簡単にするだけであり、DIに加えて他の多くの利点を提供します。

そうは言っても、それはあなたが求めていたものだと確信しています。IoCフレームワークについて; 私は以前Spring.NetCastleWindsorを頻繁に使用していましたが、背後で実際に苦労したのは、作成しなければならない厄介なXML構成だけでした。彼らは現在、ほとんどすべてこの方法で動いているので、私は昨年1年ほどStructureMapを使用しており、StructureMapは厳密に型指定されたジェネリックスとレジストリを使用する流暢な構成に移行して以来、IoCを使用する上での悩みの壁はゼロ以下!私のIoC構成がコンパイル時に(ほとんどの場合)チェックされ、StructureMapとその速度にほんの少しの喜びしかなかったことがわかったので、私は完全に気分を害しました。他の人が実行時に遅いとは言いませんが、それらは私にとってセットアップがより困難で、フラストレーションがその日を勝ち取りました。

更新

私は最新のプロジェクトでNinjectを使用してきましたが、使用できて本当に嬉しいです。言葉はここで少し失敗しますが、(英国で言うように)このフレームワークは「犬」です。すぐに立ち上げて実行したいグリーンフィールドプロジェクトには、これを強くお勧めします。Justin EtheredgeによるNinjectスクリーンキャストの素晴らしいセットから必要なすべてを手に入れました。既存のコードへのNinjectのレトロフィットが問題であることはまったくわかりませんが、私の経験では、StructureMapについても同じことが言えます。今後はこの2つの間で難しい選択になるでしょうが、私は停滞よりも競争をしたいので、そこそこ健全な競争がかなりあります。

他のIoCスクリーンキャストもここでDimecastsで見つけることができます。


1
ワンライナーについて、高品質でよく考えられた回答の増加を見るのは素晴らしいことです。あなたは私にStructureMapをチェックするように説得しました。
Chris Marasti-Georg、

7
いいけど公平に言うと-ウィンザーには、非常に素晴らしい本格的な流暢なインターフェイスも備わっています。
Krzysztof Kozmic

DIの簡単な実装以外にIoCフレームワークが提供する「他の多くの利点」とは何ですか?
fearofawhackplanet

IoCコンテナはそれを行うことができる唯一のものの@fearofawhackplanet 1はで行うことができない貧乏人のDI迎撃。ここで良い要約:kenneth-truyers.net/2013/05/16/…–
Mathieu Guindon

1
私はNinjectが最も遅いと言うことソースのカップルを読んだpalmmedia.de/blog/2011/8/30/...stackoverflow.com/questions/4581791/...
ルークTオブライエン

77

それぞれに長所と短所があるので、それはあなたが探しているものに依存します。

  1. Spring.NETそれは、Javaの世界からSpringから出てきた最も成熟したものです。Springには、Web、Windowsなどをサポートするために拡張する、非常に豊富なフレームワークライブラリのセットがあります。
  2. Castle Windsor.NETプラットフォームで最も広く使用されているものの1つであり、最大のエコシステムがあり、高度に構成可能/拡張可能で、カスタムのライフタイム管理、AOPサポート、固有のNHibernateサポートがあり、オールラウンドな素晴らしいコンテナーです。ウィンザーは、モノレール、アクティブレコードなどを含むスタック全体の一部です。NHibernate自体はウィンザーの上に構築されます。
  3. Structure Map 内部DSLを通じて非常に豊富で細かい構成を持っています。
  4. Autofacそれはすべて固有の関数型プログラミングサポートを備えた新時代のIoCコンテナーです。また、他の方法とは異なる方法で寿命を管理します。Autofacはまだ非常に新しいものですが、IoCで何ができるかについての基準を押し上げています。
  5. Ninject 私は、より少ないアプローチがより多くの裸の骨であると聞いたことがあります(経験されなかったと聞いた)。
  6. の最大の差別化要因はUnity、Microsoft(p&p)によるものであり、Microsoftによってサポートされています。Unityは非常に優れたパフォーマンスと優れたドキュメントを備えています。また、高度な設定も可能です。それは言う城/構造マップのすべての鐘と笛を持っているわけではありません。

要約すると、それは本当にあなたにとって何が重要かによって異なります。私は、どれが適しているかを調べ、評価し、見ることについて他の人に同意します。良いことは、単にゼリーを用意する必要があるのではなく、ドーナツの素晴らしい選択があることです。


4
Autofacは実際にはそれほど新しいものではなく、Unityより古いです:)
Nicholas Blumhardt

1
Unityより新しいと言った?私はそれが新しい時代のものであると言いました...すなわち、それは機能的な性質であることを意味しました。わかりました。私が言ったことはまだ非常に新しいものですが、ITが新しいというのは本質ではないということです。:-)
Glenn Block、

2
@Krzysztof-Unityは非常に簡単です(少なくともコードで流暢に構成されている場合)。何が痛いと思いましたか?
TrueWill


6
ここで興味深いのパフォーマンスのベンチマークだ:palmmedia.de/Blog/2011/8/30/...
スティーブン・

35

Autofac。 https://github.com/autofac/Autofacそれは本当に高速でかなり良いです。ここに比較とのリンクがあります(Ninjectがメモリリークの問題を修正した後に作成)。

http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html


私はautofacが好きですが、確かに速くはありません。:スティーブンは、上記のリンクされたようpalmmedia.de/Blog/2011/8/30/...
Serjセーガン

18

Ninjectは素晴らしいです。本当に速いようですが、比較はしていません。著者のNateがNinjectと他のDIフレームワークとを比較して、Ninjectの速度を向上させる方法を探していることを知っています。

私が尊敬する多くの人が、StructureMapとCastleWindsorについて良いことを言うのを聞いたことがあります。私の考えでは、これらは今見るべき大きな3つです。


1
Ninjectは人気がありますが、高速ではありません。これは、実際にそこに最も遅いの一つである:palmmedia.de/Blog/2011/8/30/...
Serjセーガン

13

私はシンプルなインジェクターを使用しています:

Simple Injectorは、ソリューションを成功へと導くためのベストプラクティスを使用する、簡単で柔軟かつ高速な依存関係注入ライブラリです。


4
いくつかは、いくつかの時間のためにそれを使用しても、そのためのライブラリを書いた誰かを含め、サービスロケータアンチパターンを考えてみ用心:blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern
フィリップ・

4
StevenはSimple Injectorの作成者でもあります...だからこれは一種のスパム回答です...特に彼がaltアカウントを使用してそうしたのです... Simple Injectorはかなり高速ですが、palmmedia.de
8/30

8

私はキャッスルの大ファンです。IoCコンテナの話を超えて提供される機能も気に入っています。これは、NHibernate、ロギング、AOPなどの使用を非常に単純化します。Booの構成にもBinsorを使用しており、そのため、言語としてのBooに夢中になっています。


5

Ninjectをお勧めします。信じられないほど高速で使いやすいですが、XML構成が必要ない場合にのみ、Windsorを使用してください。


1
速くない!これは、最も遅いDIフレームワークの1つです。palmmedia.de/Blog/2011/8/30/...
Serjセーガン

@Serj Sagan公平に言うと、これらの結果は古くなっています(現在6歳)
Timothy Kanski


5

最も単純なSpring.NETの例を機能させるために、1日の大部分を成功することなく苦労しました。XMLファイルからアセンブリを見つける方法を理解できませんでした。一方、約2時間で、NUnitとMSTestの両方との統合テストを含めて、Ninjectを機能させることができました。


4

私は過去にSpring.NETを使用したことがあり、大きな成功を収めました。私たちがそれを使用したプロジェクトはそれ自体でかなり重いものでしたが、私はそれにかなりのオーバーヘッドに気づくことはありませんでした。ドキュメンテーションを読むのに少し時間しかかかりませんでした。


2

C#の素晴らしい点は、それ以前に長年のJava開発者が打ち負かした道をたどっていることです。したがって、一般的にこの種のツールを探す場合の私のアドバイスは、確実なJavaの答えを探して、.NETの適応がまだ存在するかどうかを確認することです。

したがって、DIとなると(そして、非常に多くのオプションがあるため、これは本当に好みの問題です)、Spring.NETになります。さらに、プロジェクトの背後にいる人々を調査することは常に賢明です。私は、Eric Sinkを尊重しているため、SourceGear製品を(それらを使用する以外に)ソース管理に提案することに問題はありません。私はマークポラックが話すのを見てきました。

結局、多くのDIフレームワークがあり、あなたの最善の策はそれらのいくつかでいくつかのサンプルプロジェクトを実行し、教育を受けた選択をすることです。

幸運を!



2

Spring.Netは非常に堅固ですが、ドキュメントは少し時間がかかりました。Autofacは適切です。.Net2.0はサポートされていますが、それをコンパイルするにはVS 2008が必要です。それ以外の場合は、コマンドラインを使用してアプリをビルドします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.