0

通读这篇 MSDN 文章http://msdn.microsoft.com/en-us/library/dd460648.aspx我看到有人声称 MEF 对程序集没有硬依赖。我不确定这意味着什么,因为即使合同是字符串,MEF 仍然按字符串解析,然后按类型解析。所以宿主程序集和扩展程序集都需要对契约程序集的引用。这不是硬依赖吗?

托管可扩展性框架或 MEF 是一个用于创建轻量级、可扩展应用程序的库。它允许应用程序开发人员无需配置即可发现和使用扩展。它还让扩展开发人员可以轻松地封装代码并避免脆弱的硬依赖。MEF 不仅允许在应用程序内重用扩展,还允许跨应用程序重用。


最后,组件开发人员必须接受对包含他们实现的接口的程序集的硬依赖。这使得一个组件很难在多个应用程序中使用,并且在为组件创建测试框架时也会产生问题。


因为 MEF 模型不需要对特定应用程序程序集的硬依赖,它允许在应用程序之间重用扩展。这也使得开发独立于应用程序的测试工具来测试扩展组件变得容易。

谁可以给我解释一下这个?也许我误解了硬依赖到底是什么?

4

2 回答 2

3

这是说唯一的硬依赖(意味着您明确引用程序集)是定义您的程序集的interface。具有该接口的特定实现的程序集不是硬依赖。

于 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 { }

Now, the host takes a hard (explicit) reference on the plugin contract. The plugin also takes a hard reference on the plugin contract. At composition time, MEF uses late binding to load the plugin assembly at runtime. Because of this, your host doesn't explicitly depend on the plugin assembly, its only dependency is the plugin contract assembly.

于 2012-04-22T21:04:31.223 回答