0

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

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


最後に、コンポーネント開発者は、実装するインターフェイスが含まれているアセンブリへの強い依存関係を受け入れる必要があります。これにより、コンポーネントを複数のアプリケーションで使用することが困難になり、コンポーネントのテストフレームワークを作成するときに問題が発生する可能性もあります。


MEFモデルは、特定のアプリケーションアセンブリに強く依存する必要がないため、アプリケーション間で拡張機能を再利用できます。これにより、アプリケーションに関係なく、拡張コンポーネントをテストするためのテストハーネスを簡単に開発できます。

誰かが私にこれを説明できますか?たぶん私はハードな依存関係が実際に何であるかを誤解していますか?

4

2 に答える 2

3

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

于 2012-04-20T23:26:07.347 に答える
2

通常、MEF のほとんどのシナリオは、1) ホスト、2) プラグイン、および 3) プラグイン コントラクトを中心に展開します。たとえば、ホスト:

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

プラグイン:

public class SomePlugin : IPlugin
{
    // Operations
}

プラグイン コントラクト:

public interface IPlugin { }

これで、ホストはプラグイン コントラクトでハード (明示的な) 参照を取得します。プラグインは、プラグイン コントラクトのハード リファレンスも取得します。構成時に、MEF は遅延バインディングを使用して、実行時にプラグイン アセンブリを読み込みます。このため、ホストはプラグイン アセンブリに明示的に依存せず、唯一の依存関係はプラグイン コントラクト アセンブリです。

于 2012-04-22T21:04:31.223 に答える