2012-04-20 8 views
0

このMSDNの記事を読むhttp://msdn.microsoft.com/en-us/library/dd460648.aspx MEFにアセンブリに強く依存しないという主張があります。契約が文字列であっても、MEFは文字列で解決してから型で解決するので、これが何を意味するのか正確にはわかりません。そのため、ホストアセンブリと拡張アセンブリの両方でコントラクトアセンブリへの参照が必要です。これはあまり依存しないのでしょうか?MEFがアセンブリに強く依存しないようにする方法を説明してください

Managed Extensibility FrameworkまたはMEFは、軽量で拡張性のあるアプリケーション を作成するためのライブラリです。これにより、アプリケーション開発者 は、設定不要の拡張機能を検出して使用できます。また、 は、拡張開発者がコードを簡単にカプセル化して回避することを可能にします。壊れやすい ハード依存関係。 MEFは、 アプリケーション内で拡張機能を再利用できるだけでなく、アプリケーション間でも拡張機能を再利用できるようにします。


最後に、コンポーネントの開発者は、彼らが実装するインタフェースが含まれているものを組み立て にハード依存を受け入れる必要があります。これにより、 は、複数のアプリケーションでコンポーネントを使用するのが難しくなり、 コンポーネントのテストフレームワークを作成すると、 も問題を引き起こす可能性があります。


MEFモデルは、特定の アプリケーションアセンブリにはハード依存を必要としないので、それは拡張子がアプリケーションに アプリケーションから再利用することができます。これにより、アプリケーションとは独立した試験装置 ハーネスを開発して、拡張コンポーネントをテストすることも容易になります。

誰かがこれを私に説明できますか?たぶん私はハード依存が本当に何かを誤解しますか?

答えて

3

唯一のハード依存関係(アセンブリを明示的に参照することを意味します)は、インターフェイスを定義するアセンブリにあると言われています。そのインターフェイスの特定の実装を持つアセンブリは、ハード依存関係ではありません。

2

通常MEFにおけるほとんどのシナリオが1公転)ホスト、2)プラグインと3)プラグインの契約、例えば、ホスト:

public class Host 
{ 
    [ImportMany] IEnumerable<IPlugin> Plugins { get; set; } 
} 

プラグイン:

public class SomePlugin : IPlugin 
{ 
    // Operations 
} 

プラグイン契約:

public interface IPlugin { } 

ここで、ホストはプラグイン契約でハード(明示的な)参照を受け取ります。プラグインはまた、プラグイン契約でハードリファレンスをとります。合成時に、MEFは実行時にプラグインアセンブリを読み込むためにレイトバインディングを使用します。このため、ホストはプラグインアセンブリに明示的に依存しておらず、その唯一の依存関係はプラグインコントラクトアセンブリです。

関連する問題