どのC#/。NET依存性注入フレームワークを調査する価値がありますか?そして、あなたはそれらの複雑さとスピードについて何と言えますか?
どのC#/。NET依存性注入フレームワークを調査する価値がありますか?そして、あなたはそれらの複雑さとスピードについて何と言えますか?
回答:
編集(作成者ではありません):IoCフレームワークの包括的なリストがhttps://github.com/quozd/awesome-dotnet/blob/master/README.md#iocにあります。
元の答えは次のとおりです。
ここでは少しうるさいかもしれませんが、DI(依存性注入)はプログラミングパターンであり、IoC(制御の反転)フレームワークによって促進されますが、必須ではないことに注意することが重要です。IoCフレームワークはDIをはるかに簡単にするだけであり、DIに加えて他の多くの利点を提供します。
そうは言っても、それはあなたが求めていたものだと確信しています。IoCフレームワークについて; 私は以前Spring.NetとCastleWindsorを頻繁に使用していましたが、背後で実際に苦労したのは、作成しなければならない厄介なXML構成だけでした。彼らは現在、ほとんどすべてこの方法で動いているので、私は昨年1年ほどStructureMapを使用しており、StructureMapは厳密に型指定されたジェネリックスとレジストリを使用する流暢な構成に移行して以来、IoCを使用する上での悩みの壁はゼロ以下!私のIoC構成がコンパイル時に(ほとんどの場合)チェックされ、StructureMapとその速度にほんの少しの喜びしかなかったことがわかったので、私は完全に気分を害しました。他の人が実行時に遅いとは言いませんが、それらは私にとってセットアップがより困難で、フラストレーションがその日を勝ち取りました。
更新
私は最新のプロジェクトでNinjectを使用してきましたが、使用できて本当に嬉しいです。言葉はここで少し失敗しますが、(英国で言うように)このフレームワークは「犬」です。すぐに立ち上げて実行したいグリーンフィールドプロジェクトには、これを強くお勧めします。Justin EtheredgeによるNinjectスクリーンキャストの素晴らしいセットから必要なすべてを手に入れました。既存のコードへのNinjectのレトロフィットが問題であることはまったくわかりませんが、私の経験では、StructureMapについても同じことが言えます。今後はこの2つの間で難しい選択になるでしょうが、私は停滞よりも競争をしたいので、そこそこ健全な競争がかなりあります。
他のIoCスクリーンキャストもここでDimecastsで見つけることができます。
それぞれに長所と短所があるので、それはあなたが探しているものに依存します。
Spring.NET
それは、Javaの世界からSpringから出てきた最も成熟したものです。Springには、Web、Windowsなどをサポートするために拡張する、非常に豊富なフレームワークライブラリのセットがあります。Castle Windsor
.NETプラットフォームで最も広く使用されているものの1つであり、最大のエコシステムがあり、高度に構成可能/拡張可能で、カスタムのライフタイム管理、AOPサポート、固有のNHibernateサポートがあり、オールラウンドな素晴らしいコンテナーです。ウィンザーは、モノレール、アクティブレコードなどを含むスタック全体の一部です。NHibernate自体はウィンザーの上に構築されます。Structure Map
内部DSLを通じて非常に豊富で細かい構成を持っています。Autofac
それはすべて固有の関数型プログラミングサポートを備えた新時代のIoCコンテナーです。また、他の方法とは異なる方法で寿命を管理します。Autofacはまだ非常に新しいものですが、IoCで何ができるかについての基準を押し上げています。Ninject
私は、より少ないアプローチがより多くの裸の骨であると聞いたことがあります(経験されなかったと聞いた)。Unity
、Microsoft(p&p)によるものであり、Microsoftによってサポートされています。Unityは非常に優れたパフォーマンスと優れたドキュメントを備えています。また、高度な設定も可能です。それは言う城/構造マップのすべての鐘と笛を持っているわけではありません。要約すると、それは本当にあなたにとって何が重要かによって異なります。私は、どれが適しているかを調べ、評価し、見ることについて他の人に同意します。良いことは、単にゼリーを用意する必要があるのではなく、ドーナツの素晴らしい選択があることです。
Autofac。 https://github.com/autofac/Autofacそれは本当に高速でかなり良いです。ここに比較とのリンクがあります(Ninjectがメモリリークの問題を修正した後に作成)。
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
Ninjectは素晴らしいです。本当に速いようですが、比較はしていません。著者のNateがNinjectと他のDIフレームワークとを比較して、Ninjectの速度を向上させる方法を探していることを知っています。
私が尊敬する多くの人が、StructureMapとCastleWindsorについて良いことを言うのを聞いたことがあります。私の考えでは、これらは今見るべき大きな3つです。
私はシンプルなインジェクターを使用しています:
Simple Injectorは、ソリューションを成功へと導くためのベストプラクティスを使用する、簡単で柔軟かつ高速な依存関係注入ライブラリです。
Ninjectをお勧めします。信じられないほど高速で使いやすいですが、XML構成が必要ない場合にのみ、Windsorを使用してください。
私は過去にSpring.NETを使用したことがあり、大きな成功を収めました。私たちがそれを使用したプロジェクトはそれ自体でかなり重いものでしたが、私はそれにかなりのオーバーヘッドに気づくことはありませんでした。ドキュメンテーションを読むのに少し時間しかかかりませんでした。
C#の素晴らしい点は、それ以前に長年のJava開発者が打ち負かした道をたどっていることです。したがって、一般的にこの種のツールを探す場合の私のアドバイスは、確実なJavaの答えを探して、.NETの適応がまだ存在するかどうかを確認することです。
したがって、DIとなると(そして、非常に多くのオプションがあるため、これは本当に好みの問題です)、Spring.NETになります。さらに、プロジェクトの背後にいる人々を調査することは常に賢明です。私は、Eric Sinkを尊重しているため、SourceGear製品を(それらを使用する以外に)ソース管理に提案することに問題はありません。私はマークポラックが話すのを見てきました。
結局、多くのDIフレームワークがあり、あなたの最善の策はそれらのいくつかでいくつかのサンプルプロジェクトを実行し、教育を受けた選択をすることです。
幸運を!
最初はNinjectを使用するのが良いと思います。Ninjectは新しく、多くの微調整を考慮しており、非常に高速です。開発者のネイトは本当に素晴らしいサイトと素晴らしいサポートを持っています。