解释MEF如何对程序集没有硬依赖性

时间:2012-04-20 23:24:12

标签: .net mef

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

  

Managed Extensibility Framework或MEF是一个用于创建的库   轻量级,可扩展的应用程序。它允许应用程序开发者   无需配置即可发现和使用扩展。它也是   让扩展开发人员可以轻松封装代码并避免脆弱   硬依赖。 MEF不仅允许在内部重用扩展   应用程序,但也适用于各种应用程序。

     
     

最后,组件开发人员必须接受硬依赖   哪个程序集包含它们实现的接口。这样做   组件难以在多个应用程序中使用,以及   在为其创建测试框架时也会产生问题   组件。

     
     

因为MEF模型不需要特定的硬依赖   应用程序集,它允许重用扩展   申请。这也使得开发测试变得容易   线束,独立于应用程序,测试扩展组件。

有人可以向我解释一下吗?也许我误解了真正的依赖是什么?

2 个答案:

答案 0 :(得分:3)

它表示唯一的硬依赖(意味着您明确引用程序集)位于定义接口的程序集上。具有该接口的特定实现的程序集不是硬依赖项。

答案 1 :(得分:2)

通常MEF中的大多数场景都围绕着1)主机,2)插件和3)插件合同。例如,主持人:

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

插件:

public class SomePlugin : IPlugin
{
    // Operations
}

插件合约:

public interface IPlugin { }

现在,主机对插件合约采用了一个硬(显式)引用。该插件还对插件合同进行了硬性参考。在组合时,MEF使用后期绑定在运行时加载插件程序集。因此,您的主机没有明确依赖插件程序集,它唯一的依赖是插件契约程序集。