MEF (マネージド拡張性フレームワーク) 対 IoC/DI
-
01-07-2019 - |
質問
既存の IoC/DI コンテナーでは解決できない問題を MEF (Managed Extensibility Framework) は解決しますか?
解決
MEF の主な目的は拡張性です。アプリケーションの作成者とプラグインの作成者が異なる場合に「プラグイン」フレームワークとして機能します (拡大) は異なり、公開されたインターフェイス (契約) 図書館。
MEF が対処するもう 1 つの問題領域は、通常の IoC の疑いとは異なり、MEF の強みの 1 つは [拡張] の検出です。拡張機能に関連付けることができるメタデータを操作する、拡張可能な検出メカニズムが多数あります。MEF CodePlex サイトから:
「MEF では、追加のメタデータを使用して拡張機能にタグ付けできるため、豊富なクエリとフィルタリングが容易になります。」
タグ付き拡張機能を遅延読み込みする機能と組み合わせることで、拡張機能のメタデータを問い合わせることができます 前 ロードすると、多くの興味深いシナリオへの扉が開かれ、[プラグイン] バージョン管理などの機能が実質的に有効になります。
MEF には、拡張機能を「適応」または「変換」できる「コントラクト アダプター」もあります (タイプからタイプへ) それらの変換の詳細を完全に制御できます。コントラクト アダプターは、まさに「発見」の意味とそれに伴うものに関連して、別のクリエイティブな最前線を開きます。
繰り返しになりますが、MEF の「目的」は匿名プラグインの拡張性に厳密に焦点を当てており、これが他の IoC コンテナーとは大きく異なります。したがって、MEF は合成に使用できますが、それは他の IoC と比較して MEF の機能の小さな交差点にすぎず、今後は多くの近親相姦的な相互作用が見られるのではないかと私は考えています。
他のヒント
IoC コンテナは、あなたが知っていることに焦点を当てています。単体テストでは 1 つのロガーを使用し、アプリでは別のロガーを使用することはわかっています。MEF は、ユーザーが認識しないものに焦点を当てています。私のシステムには 1 ~ n 個のロガーが表示される可能性があります。
スコット・ハンセルマンと私は、最近のハンセルミニッツでこのトピックについてさらに詳しく取り上げました。