2011-02-10 7 views
8

私が間違っていれば私を修正しますが、MEFは自動発見と自動配線が可能な未知のもの(プラグイン)を管理するためにのみ役に立ちます。将来のプロジェクトでは、アプリケーションの既知の部分を明示的に設定するための真のIoCコンテナが必要です(MEFがうまくいかない)が、さらに自動検出されたプラグインをサポートする必要があります。 IoCコンテナはこれを簡単に/デフォルトでサポートできますか?もしそうならば、 をUnityやStructureMapでどのように行うかについてのヒントを教えてください。それらは私たちが現在好む2つのものです。私たちは本当にIoCコンテナ MEFへの依存を避けたいと思います。プラグインアーキテクチャにはIoCコンテナを使用してください

+0

MEFをプラグインとして使用すると何が問題になりますか?そのユースケースと.Netフレームワークの一部のために設計されています。 – jeroenh

+0

Spring.Netを見てください。 –

+1

あなたはIoCコンテナとMEFを避けたいと言ったので、私はこれを答えとして掲示しません。しかし、[Autofac](http://nblumhardt.com/2010/04/introducing-autofac-2-1-rtw/)はMEFとかなりよく統合されています。 –

答えて

8

MEFは従来の意味でのIoCコンテナではありませんが、制御の逆転を実行しています。実際、私はそれに同意せず、MEFは他のどのようなIoCコンテナでもあると言っています。 UnityとMEFの実際の違いは、MEFはデフォルトで明示的な型解決による構成をサポートし、構成上の型発見をサポートするということです。しかし、MEFContribプロジェクトで見てきたように、MEFの伝統的なIoCコンテナのように動作することは、まったく可能です。 MEFは、モジュラーなコンポーネントの動作に大きな基盤を提供します。ハードグラフトを多く取り入れ、設計された方法で、より多くの機能を追加することができます。たとえば、別のIoCコンテナやサービスロケータを使用して既存のコードベースを構築したとします。ExportProviderを結び付けて、Common Service Locatorプロジェクトのようなサービスロケータにプロバイダを接続し、互換性のあるプラグインを行うことができますCSL実装をサポートし、他のIoCコンテナから派生したタイプを使用してMEFにコンポーネントパーツを構成させることができます。 MEFは依存関係の注入も行います。

特定のIoCコンテナまたはMEF自体に依存しないようにするには、一般的なコンテナ操作よりも抽象的なCommon Service Locatorのようなものを常に使用できます。そうすれば、すべてが一緒につながっていく様子を変更する必要がある場合や、変更したい場合は、比較的苦労します。ほとんどのIoCコンテナとMEFに互換性のあるCSL実装があります。

希望に役立ちます。

+0

MEF Contribは、パーツを属性なしでPOCOにすることができますか? – bitbonk

+2

Attributedモデルは、MEFのデフォルトのプログラミングモデルです。 MEFContribには 'ConventionCatalog'があります。これは' PartRegistry'と組み合わせると、Unity/Autofac/Windsorなどのコンテナのような型を登録することができます。 –

関連する問題