解释 MEF 如何不硬依赖程序集



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

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


最后,组件开发人员必须接受 哪个程序集包含它们实现的接口。这使得它 一个组件难以在多个应用程序中使用,并且 创建 的 测试 框架 时 也 可能 产生 问题 组件。


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

有人可以向我解释一下吗?也许我误解了硬依赖到底是什么?

它说唯一的硬依赖项(意味着您显式引用程序集)是在定义接口的程序集上。具有该接口的特定实现的程序集不是硬依赖项。

通常,

MEF 中的大多数场景都围绕 1) 主机、2) 插件和 3) 插件合约,例如主机:

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

一个插件:

public class SomePlugin : IPlugin
{
    // Operations
}

插件合约:

public interface IPlugin { }

现在,主机对插件合约进行硬(显式)引用。该插件还对插件合约进行了硬引用。在组合时,MEF 使用后期绑定在运行时加载插件程序集。因此,您的主机不会显式依赖插件程序集,它唯一的依赖项是插件合约程序集。

最新更新