web-dev-qa-db-ja.com

Castle Windsor、Unity、およびStructureMapの比較

Krzysztofの声明 その Windsor までのフォローアップでは、これらのIoCが互いにどのように積み重なるか、そしてそれがもたらす利点/追加機能を理解したかった城ウィンザーが提供します。

比較はありますか? Castle Windsorが他のIoCを超える追加機能を理解するのを手伝ってもらえますか

51
Quintin Par

here および here を参照してください。いくつかのIoCコンテナーのかなり徹底した技術的比較については、今のところ多少古くなっています(Windsor 2.0以前のものです)

ただし、Windsorが提供するその他のコンテナにはないvital機能は実際にはないと思います。 WindsorStructureMapSpring.NET は数年前から存在しており、ここ数年で多くのプロジェクトで使用されているため、今非常に成熟しています。 AutofacnityNinject 、および SimpleInjector のような新しいコンテナーは、以前のエクスペリエンスに基づいて構築されるため、不足することはありませんこれらの重要な機能のいずれか。

答えのより主観的な部分:Windsorには、使いやすさ、拡張性、および統合モジュールがうまく組み合わされていると思います。

使いやすさ:たとえば、XMLやコード登録を使用できます(最近のほとんどのコンテナのように fluent API もあります) )。

拡張性多くの拡張ポイント ほぼすべてのデフォルト動作をカスタマイズまたはオーバーライドするために使用できます。

Integration:Windsorには 多くの機能 (モジュール)があり、他のフレームワーク/ライブラリと簡単に統合できます。その他の統合には、 ASP.NET MVCMonoRailWorkflow FoundationNServiceBusMassTransit =、 Rhino Service BusQuartz.NetSolrNetSolrSharpWindows FAXサービス

この一連の記事 Windsorの多くの機能と拡張ポイントについて説明しています。

私はnotであり、他のコンテナは同様のものを提供しないと言っていることに注意してください!それらの1つを選択し、後で統合が不足していることがわかったとしても、通常は自分でコーディングするのは難しくありません。

一番下の行:コードを適切に構造化する限り、メインのIoCコンテナのいずれかで問題が発生する可能性はないと思います(たとえば、サービスロケーターアンチパターン)。

48

私にとって、Windsorには2つのキラー機能がありますが、他のほとんどのコンテナにはないと思います。

  • コンテナにとらわれない方法で動作する機能-これは、コンテナがすべてのコードをbootstrapすることができ、Castle。*。dllアセンブリを参照することなくその豊富な機能を最大限に活用できることを意味しますインフラストラクチャアセンブリではありません。これは、Lazy Component Loaders、DynamicParameters、Typed Factory Facilityなどの機能のおかげで、コンテナの高度な機能の利用を制限せず、統合レイヤーを手動でコーディングしたり、Service Locatorを使用したりする必要がありません@ploehが書いたように、これはアンチパターンです。

  • 非常に豊富な拡張性/拡張性エコシステムにより、非常に強力な機能を提供し、記述しなければならない配管コードの量を大幅に削減できます。これはパワフルに聞こえないかもしれませんが、あるプロジェクトでWCFファシリティのようなものを利用すると、感謝します。それを使用することができます。拡張性の部分は、Windsorがすぐに使用できるすべての問題を解決しようとはしませんが(これがその設計目標です)、非常に拡張可能であることを意味します。

それ以外は、Windsorが期待通りに動作する方法が好きです( 他のコンテナとは逆 )そして、それがささいなことを解決する方法。たとえば、装飾されたサービスの作成は非常に簡単です。また、流fluentな登録APIが非常に気に入っています。これは、両方の単純なシナリオで非常にうまく機能し、高度なことをしたいときにねじれたり複雑になったりしません。さらに、他の多くの小さなこともありますが、ここでは非常に主観的なことがあります。

17