現時点では、 Managed Extensibility Framework ( MEF ) について頭を悩ませ、少し掘り下げようとしています。私はEclipseのバックグラウンドを持っているので、私の脳には現在方程式があります:
MEF =~ OSGi for .NET
今まで聞いた話によると。私は正しい線にいますか?
スコット・ハンゼルマンは、グレン・ブロックとのポッドキャスト148で、MEFの詳細を強調するのに役立ちました。
OSGiと比較すると、MEFは「制御の反転」に基づいて構築されていますが、OSGiはそうではありません。OSGi(OSGi)は、ライフサイクルレイヤーに基づく異なるメカニズムを通じて新しいバンドルを検出します。
MEFは、アプリケーションの拡張性に重点を置いています。さまざまな拡張機能を構成するための戦略としてDIを使用しますが、それ自体は汎用のDIコンテナーではありません。
最後のポイントは混乱を招く可能性があるため、ポッドキャストのトランスクリプトは次のことに役立ちます。
基本的に私がそれを位置付ける方法、2つの違いは、IoCコンテナーは実際には、ディスク環境にロガーが必要な場合や、テスト環境にモックロガーが必要な場合など、さまざまな環境で既知のセットを管理することです。 。
つまり、MEFは実際には未知のセットを管理することであり、結局のところ、IoCコンテナでは、規則ベースまたは登録、特定の登録メカニズムのいずれかを実行する傾向があります。これは、ロガーの意味です。これがこれです。つまり、これが意味することです。
MEFは、コードと、コード上の検出メカニズムおよび注釈を使用します。これらは属性であり、システムに表示されるものはすべて、そこにあります。
繰り返しになりますが、より高いレベルでは、MEFを使用して一連の未知のものを実際に管理し、IoCコンテナを使用して一連の既知のものを管理します。
結論:(の1つ)主な違いは発見の原則です(IoCとライフサイクル)
OSGi は、IoC コンテナーをモジュールとしてその上に提供できるように設計されていることに注意してください。実際には、OSGi 用の複数の IoC コンテナーと、DS、iPOJO、Blueprint などの他のメカニズムが利用可能です。