私は依存性注入について検索しており、いくつかの記事を読みました。それでも、MEFと他のIoCの違いを見つけることはできません。したがって、私の質問は次のとおりです。どのような状況でMEFまたはIoCコンテナーを使用することを選択すべきですか
(WPF&Silverlight)またはデスクトップアプリケーション用にPRISMでMEFを使用するのが良いのはなぜですか?
一方、Webアプリケーションでは、IoCコンテナーを使用します。
それで、どの依存性テクニックを使うべきかを決める基準は何ですか?
私は記事を読んできました http://devlicio.us/blogs/casey/archive/2009/12/18/what-is-the-difference-between-an-ioc-container-and-mef。 aspx 、しかし、私は何も決定できませんでした。
最終的に、MEF対IoCコンテナについて私が結論付けたのは次のとおりです。
MEFは、未知のタイプまたはプラグインベースのアーキテクチャを扱う必要がある場合に使用することをお勧めします。
IoCコンテナーは、既知のタイプで使用することをお勧めします。
さらに、MEFは依存性注入のアーキテクチャソリューションです
一方、IoCコンテナは、依存性注入のためのコードレベルのソリューションです。
IoCコンテナは、クラスのインスタンスを生成する依存関係注入テクニックであり、それらのクラスのコンストラクターが他のクラスのオブジェクトを必要とする場合、IoCは必要なオブジェクトも注入します。しかし、MEFは単なる依存関係の注入以上のことを行います。ただし、MEFは依存関係の注入にIoCベースのアプローチも使用しますが、MEFは依存関係の注入以外にも多くのことを行います。
MEFには2つのコンポーネントがあります。
カタログ:拡張機能の発見を担当
コンテナ:実行中のアプリケーションに拡張機能をロードする機能を提供します
MEFは、依存性注入のテクニック以上のものです。アプリケーションにプラグインベースのアーキテクチャが必要な場合に使用されますが、同時にMEFは依存性注入にIoCベースのアプローチを使用します。
これについてより多くの人がコメントすることを期待しています。
IoCはアーキテクチャ設計戦略であり、MEFは設計パターン依存性注入の実装です。多くの場合、依存性注入(DI)はIoCの実装戦略です。多くの場合、IoCコンテナという用語が使用されており、IoCがテクニックであることを示唆しています。
いいえ、そうではありません。 IoCは幅広い概念であり、DIはIoCのコアを実装するための設計パターンです。 MEFは何らかの形式のDIですが、IoCのすべての基本機能を備えているわけではありません。
MEFは構成を使用して、解決する必要がある依存関係を見つけます。これは、他の多くのIoCコンテナー、たとえばPicoや Spring によく似ています。しかし、そこで止まります。ライフサイクル管理もプーリング構成も見ませんでした。後者の2つは、IoCの基本的な部分(DIではなく)であると考えます。これは、呼び出し先のパフォーマンスが、呼び出し先で使用されるメモリ消費のために低下しないためです。
IoCの原則は、発信者と着信者を疎結合することによるサービスです。そうすれば、両方の機能が最適化されて機能します。 MEFには、最適化に問題があるという問題がある場合があります。たとえば、メニューからデータベースへの呼び出しがある場合、いつかはデータベースへの呼び出しが行われます。そのためには常にプーリングを使用するのが最善です。 MEFはそれを行うことができません。
アプリケーションのタイプは、設計パターンの選択から独立している必要があります。デスクトップアプリケーションとWebアプリケーションの間に大きな違いはありません。どちらもユーザーインターフェイスであり、どちらもMEFとIoCを使用できる必要があります。機能が簡単で、最適化の境界を越える必要がない場合(データベースコールなど)、MEFは.NET 4を使用するときに存在するフレームワークであるため、最初の選択肢です。 (ファイルの解析やアップロードなど)最適化の境界を越えた場合、IoCコンテナーの使用はパフォーマンスとメンテナンスにとってより有益です。
使用した情報:
Hanselminutes 148 (グレンブロックとのポッドキャストインタビュー)。
制御の反転(Wikipedia)