2008-08-21 14 views
338

どのC#/ .NET Dependency Injectionフレームワークを調べる価値がありますか? そして、その複雑さとスピードについてはどういうことが言えますか?どの.NET Dependency Injectionフレームワークを調べる価値がありますか?

+13

[IoCコンテナベンチマーク - パフォーマンス比較](http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison)には20以上の製品のパフォーマンスと機能の比較表がありますそれらを最新の状態に保ちます。 [Simple Injector](http://simpleinjector.codeplex.com/)をお勧めします –

+0

Ninject&Maestroに感謝します。私はトップランクの答えがNinjectを「絶対的な喜び」としてくれることを嬉しく思っています –

+2

IoCコンテナを調べる前に、あなたは一人で管理してください。手作業で配線や注入を行います。本当に複雑なシステムや大規模なシステムを持っていない限り、実際には複雑ではなく、多くのコードを必要とします。あなたがそれを理解していると感じて、それが混乱するようになったら、どんな種類のフレームワークがあなたを助けてくれるのかを理解するのが良いでしょう。 DIを適切に行うためにはプロジェクトにIoCコンテナがなければならないというルールはありません。 – kai

答えて

297

編集(ない著者):https://github.com/quozd/awesome-dotnet/blob/master/README.md#iocで入手可能なのIoCフレームワークの包括的なリストがあります:

  • Castle Windsor - 城ウィンザーは、.NETのための最善の組み合わせ、コントロールコンテナの成熟反転が可能ですそして、Silverlight
  • Unity - コンストラクタ、プロパティ、メソッド呼び出しの注入
  • Autofacをサポートする軽量の拡張可能な依存性注入容器 - 中毒性の.NETのIoC CONT ainer
  • DryIoc - シンプルで高速な全機能IoCコンテナ。
  • Ninject - .NET依存インジェクタのニンジャ
  • StructureMap - ネット
  • の元のIoC/DIコンテナ
  • Spring.Net - Spring.NETは容易
  • エンタープライズ.NETアプリケーションを構築することができるオープンソースアプリケーションフレームワークであります
  • LightInject - 超軽量IoCコンテナ
  • Simple Injector - Simple Injectorは、Silverlight 4以降、Windows Phone 8、Windows 8(Universalアプリ、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 - 小規模なプロジェクト、ライブラリ、初心者のために使いやすく、面倒な、Inversion of Control Container。

オリジナルの回答が続きます。


は、私はここに少しうるさいことかもしれないと仮定し、DI(依存性注入)は、プログラミングパターンであるとによって促進されることに注意することが重要だが、、のIoC(制御の反転)フレームワークを必要としません。 。 IoCフレームワークは、DIをはるかに簡単にするだけでなく、DI以上のさまざまなメリットを提供します。

言われていることは、私はそれがあなたが求めていたものだと確信しています。 IoCフレームワークについて私はSpring.NetCastleWindsorをたくさん使っていましたが、背後にある本当の苦痛は、書かなければならなかった厄介なXML設定でした!彼らは今のところほとんどすべてがこのように動いているので、私は最後の1年ほどでStructureMapを使っています。強く型付けされたジェネリックとレジストリを使って流暢な設定に移行しているので、IoCを使う際の痛みの障壁はゼロ以下!私はIoCの設定がコンパイル時にチェックされ(ほとんどの場合)、StructureMapとそのスピードに喜びを感じています。私は実行時に他の人が遅いとは言わないが、彼らは設定や欲求不満のために一層難しかった。

更新

私は私の最新のプロジェクトでNinjectを使用してきたし、使用する絶対的な喜びとなっています。言葉はここで少し失敗しますが、(私たちがイギリスで言うように)この枠組みは「犬」です。私は、あなたが素早く立ち上げて走りたいと思っている緑色の畑のプロジェクトに強くお勧めします。私は、私が必要としているのは、Justin Etheredgeのfantastic set of Ninject screencastsです。私は既存のコードへのレトロフィットのNinjectがまったく問題であるのを見ることはできませんが、同じことが私の経験ではStructureMapと言えるでしょう。その2つの間では厳しい選択肢になるだろうが、私はむしろ競争が停滞よりもむしろそこに健康的な競争のまともな量があるだろう。

他のIoCスクリーンキャストもhere on Dimecastsです。

+1

品質、よく考えられた答えを見ることは素晴らしいです1ライナーについてあなたは私にStructureMapをチェックアウトさせることを納得させました。 –

+6

いいですが、公正であること - ウィンザーは非常に素晴らしい本格的な流暢なインターフェースを今も持っています。 –

+0

IoCフレームワークが提供するDIの容易な実装以外に、「その他の利点のホスト」は何ですか? – fearofawhackplanet

18

Ninjectは素晴らしいです。本当に速いようですが、私は比較をしていません。著者Nateは、Ninjectと他のDIフレームワークの間のいくつかの比較を行い、Ninjectの速度を改善するためのより多くの方法を探していることを知っています。

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

+1

Ninjectは人気がありますが、確かに高速ではありません。それは実際には最も低速のうちの1つです:http://www.palmmedia.de/Blog/2011/8/30/ioc-container-benchmark-performance-comparison –

4

私はこれまでにSpring.NETを使用しており、大きな成功を収めました。かなりのオーバーヘッドに気づいたことはありませんでしたが、私たちが使ったプロジェクトはかなり重かったです。 documentationを読んで少しだけ時間をかけてセットアップしました。

2

C#の素晴らしい点は、これまでに数年間のJava開発者が苦しんできた道をたどっていることです。だから、私のアドバイスは、一般的に言えば、この性質のツールを探すときには、Javaの答えを探し、まだ.NETの適応が存在するかどうかを調べることです。

DIになると(そこにはたくさんのオプションがありますが、これは本当に味の問題です)Spring.NETです。さらに、プロジェクトの背後にいる人々を研究することは常に賢明です。私はEric Sinkを尊重しているため、SourceGear製品にソース管理用の製品を使用することを推奨していません。私はMark Pollackが話すのを見ましたが、私は何を言うことができます、男はちょうどそれを取得します。

結局のところ、多くのDIフレームワークがありますし、いくつかのサンプルプロジェクトをいくつか実行して教育的な選択をするのが最善の方法です。

幸運を祈る!

35

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

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

+0

私はオートファクトが好きですが、確かに高速ではありません。 Stevenが上記のようにリンクしているように:http://www.palmmedia.de/Blog/2011/8/30/ioc-container-benchmark-performance-comparison –

2

私が開始するには良い場所は、それが新規であると微調整のアカウントたくさんに入れたと本当に速いです、Ninjectであると思います。開発者のNateは本当に素晴らしいサイトと素晴らしいサポートを提供しています。

+0

なぜそれは速いと言っていますか?それはそこにある最も遅いのです! http://www.palmmedia.de/Blog/2011/8/30/ioc-container-benchmark-performance-comparison –

5

Ninjectをおすすめできます。それは信じられないほど速くて使いやすいですが、あなたがXML設定を必要としない場合にのみ、そうでなければウィンザーを使うべきです。

+0

これは高速ではありません!そこでは最も遅いDIフレームワークの1つです! http://www.palmmedia.de/Blog/2011/8/30/ioc-container-benchmark-performance-comparison –

+0

@Serj Sagan公正であるためには、それらの結果は古代(現在6歳) –

+2

https:// www.acshaysura.com/2016/08/31/ioc-container-benchmark-comparison-2016-including-microsoft-extensions-dependencyinjection/ –

8

私は城の大ファンです。私はそれがIoCコンテナの話を超えて提供する施設が大好きです。 NHibernate、ロギング、AOPなどを使っているのは本当に簡単です。私はまた、BooとのコンフィギュレーションにBinsorを使用しています。そのため、Booと実際には恋に落ちました。

2

春。ネットはかなり安定していますが、ドキュメンテーションには時間がかかりました。 Autofacは良いですが、.Net 2.0はサポートされていますが、コンパイルするにはVS 2008が必要です。あるいは、コマンドラインを使ってアプリケーションをビルドしてください。

74

それぞれの賛否両論がありますので、探している内容によって異なります。それはJavaの世界から春から出てくるよう

  1. Spring.NETは最も成熟しています。春は最も広く.NETプラットフォームで使用されるの一つであり、最大の生態系を持っている
  2. Castle Windsorなど、ウェブ、Windowsのをサポートするためにそれを拡張フレームワークライブラリの非常に豊富なセットを持って、高度な設定/拡張可能ですAOPをサポートしています.Hibernateのサポートがあり、すばらしいコンテナです。ウィンザーは、モノレール、アクティブレコードなどを含むスタック全体の一部です。NHibernate自体はウィンザーの上に構築されています。
  3. Structure Mapは、内部DSLによって非常に豊富で細かい粒度構成を持っています。
  4. Autofacは、新しい年齢のIoCコンテナであり、すべてが固有の関数プログラミングサポートを備えています。それはまた、他のものよりも寿命を管理する上で異なるアプローチをとる。オートファックはまだまだ新しいものですが、IoCで可能なことには限界があります。
  5. Ninject私は聞いたことがあります。
  6. 最大の弁別器はUnityです。これはMicrosoftのものであり、Microsoftによってサポートされています(p & p)。 Unityは非常に優れたパフォーマンスと素晴らしいドキュメントを持っています。また、高度に構成可能です。それは、城/構造マップのすべての鐘と笛を持っているわけではありません。

要するに、それは本当にあなたにとって重要なものに依存します。私は他の人が、どれが合うかを評価し、見ていることに同意するでしょう。素敵なのは、ゼリーを食べるだけでなく、ドーナツの素晴らしい選択肢があることです。

+4

オートファックは実際にはそれほど新しいものではなく、ユニティより古いです。 –

+0

私はそれを言ったのですか? Unityよりも新しい?私はそれが新しい時代だと言った...つまり、それは機能的な性質を意味した。 OK、私はそれがまだ新しいことだと言っていましたが、ITは新しいものではなく自然という意味でした。 :-) –

+2

@ Krzysztof - 私は、少なくともコードがうまく構成されていれば、Unityの扱いが簡単だと思っています。あなたは何が痛いと思いましたか? – TrueWill

12

私はSimple Injectorを使用します。

シンプルなインジェクタは、成功のピットに向かって、あなたの解決策を導くためのベストプラクティスを使用して、簡単に柔軟かつ迅速依存性注入ライブラリです。

+4

サービスロケータは、 http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/ – Philippe

+2

スティーブンはSimple Injectorの作成者でもありますので、これはある種のスパムの回答...特に彼はそうするためにaltアカウントを使用していました... Simple Injectorはかなり高速です:http://www.palmmedia.de/Blog/2011/8/30/ioc-container-ベンチマークパフォーマンス比較 –

4

私は、最も簡単なSpring.NETのサンプルがうまく動作するまでに苦労しました。 XMLファイルからアセンブリを見つける方法を決めることはできません。一方、約2時間で、私はNUnitとMSTestの両方との統合テストを含め、Ninjectを動作させることができました。

関連する問題