どの .NET 依存関係注入フレームワークを検討する価値がありますか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/21288

質問

どの C#/.NET 依存関係挿入フレームワークを検討する価値がありますか?そして、その複雑さとスピードについては何と言えますか。

役に立ちましたか?

解決

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

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

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


ここで私が少しうるさいかもしれませんが、DI (Dependency Injection) はプログラミング パターンであり、IoC (Inversion of Control) フレームワークによって促進されますが、必須ではないことに注意することが重要です。IoC フレームワークは DI をはるかに簡単にするだけでなく、DI 以外にもさまざまな利点を提供します。

そうは言っても、確かにそれがあなたが尋ねていたことだと思います。IoC フレームワークについて。以前使用していました Spring.Net そして キャッスルウィンザー たくさんの作業がありますが、実際に苦労したのは、面倒な XML 構成をすべて記述しなければならないことでした。彼らは今、ほとんどすべてこのように動いているので、私は使っています 構造図 ここ 1 年ほどで、厳密に型指定されたジェネリックスとレジストリを使用する流暢な構成に移行して以来、IoC を使用する際の苦痛の障壁はゼロ以下に下がりました。IoC 構成が (ほとんどの場合) コンパイル時にチェックされることを知ると、本当に興奮します。また、StructureMap とその速度には喜びしかありません。他のものは実行時間が遅いとは言いませんが、私にとってはセットアップがより難しく、その日はフラストレーションが勝ってしまうことがよくありました。

アップデート

私は使ってきました ニンジェクト 私の最新のプロジェクトで使用しましたが、本当に楽しく使用できました。ここではちょっと言葉が足りませんが、(英国で言うところの)この枠組みは「犬」です。すぐに稼働させたいグリーンフィールドプロジェクトに強くお勧めします。必要なものはすべてAから入手しました Ninject スクリーンキャストの素晴らしいセット ジャスティン・エサエッジ著。Ninject を既存のコードに後付けすることが問題になるとはまったく思えませんが、同じことが言えるでしょう。 構造図 私の経験では。今後、この 2 つのどちらかを選択するのは難しい選択になるでしょうが、私は停滞するよりも競争があったほうがいいと思っていますし、健全な競争が十分に行われています。

他の IoC スクリーンキャストも見つかります ここDimecastsで.

他のヒント

それぞれに長所と短所があるため、何を探しているかによって異なります。

  1. Spring.NET Java の世界で Spring から生まれたものとしては、最も成熟しています。Spring には、Web、Windows などをサポートするように拡張する非常に豊富なフレームワーク ライブラリのセットがあります。
  2. Castle Windsor .NET プラットフォームで最も広く使用されているコンテナーの 1 つであり、最大のエコシステムを持ち、高度な構成/拡張性があり、カスタム有効期間管理、AOP サポート、固有の NHibernate サポートを備えた、オールラウンドに優れたコンテナーです。Windsor は、Monorail、Active Record などを含むスタック全体の一部です。Hibernate 自体は Windsor 上に構築されます。
  3. Structure Map 内部 DSL を介した非常に豊富で詳細な構成を備えています。
  4. Autofac は、固有の関数型プログラミングのサポートをすべて備えた新時代の IoC コンテナーです。また、寿命の管理に関しても他のものとは異なるアプローチを採用しています。Autofac はまだ非常に新しいですが、IoC で可能なことの限界を押し上げています。
  5. Ninject 必要最小限のアプローチで、少ないほど良いアプローチができると聞いたことがあります(経験はありませんが)。
  6. 最大の差別者は Unity は:これは Microsoft (p&p) が提供し、サポートしています。Unity は非常に優れたパフォーマンスと優れたドキュメントを備えています。また、高度に構成可能です。城や構造図などの追加機能がすべて含まれているわけではありません。

要約すると、それはあなたにとって何が重要かによって決まります。私も、実際に行って評価し、どれが適合するかを確認するという意見には同意します。嬉しいのは、ゼリーだけでなく、ドーナツの種類も豊富に揃っていることです。

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

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

ニンジェクトは素晴らしいですね。とても速いように思えますが、比較はしていません。著者の Nate が Ninject と他の DI フレームワークをいくつか比較し、Ninject の速度を向上させるさらなる方法を探していることは知っています。

私が尊敬する多くの人が StructureMap と CastleWindsor について良いことを言っているのを聞いてきました。私の考えでは、これらが今注目すべきビッグ 3 です。

私が使う 簡易インジェクター:

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

私はキャッスルの大ファンです。IoC コンテナー以外にも提供される機能が気に入っています。NHibernate、ロギング、AOP などの使用が非常に簡単になります。私も使っています ビンソル Boo の設定に興味があり、そのおかげで言語としての Boo に夢中になりました。

Ninjectをお勧めします。これは信じられないほど高速で使いやすいですが、XML 構成が必要ない場合に限り、そうでない場合は Windsor を使用する必要があります。

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

使ったことがある Spring.NET 過去にそれで大成功を収めました。これを使用したプロジェクトはそれだけでかなり重かったですが、これによる大きなオーバーヘッドに気づいたことはありません。読み進めるのに少し時間しかかかりませんでした ドキュメンテーション セットアップしてください。

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

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

結局のところ、DI フレームワークはたくさんあります。最善の策は、そのうちのいくつかを使用してサンプル プロジェクトを実行し、知識に基づいて選択することです。

幸運を!

Ninject から始めるのが良いと思います。これは新しく、多くの微調整が考慮されており、非常に高速です。開発者の Nate は本当に素晴らしいサイトと素晴らしいサポートを持っています。

Spring.Net は非常に堅牢ですが、ドキュメントを読み進めるのに時間がかかりました。Autofac は優れており、.Net 2.0 はサポートされていますが、それをコンパイルするには VS 2008 が必要で、それ以外の場合はコマンド ラインを使用してアプリを構築します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top