阅读这篇MSDN文章http://msdn.microsoft.com/en-us/library/dd460648.aspx我看到MEF对程序集没有硬性依赖的说法。我不确定这意味着什么,因为即使合同是字符串,MEF仍然按字符串解析,然后按类型解析。因此主机和扩展组件都需要对合同程序集的引用。这不是一种硬依赖吗?
Managed Extensibility Framework或MEF是一个用于创建的库 轻量级,可扩展的应用程序。它允许应用程序开发者 无需配置即可发现和使用扩展。它也是 让扩展开发人员可以轻松封装代码并避免脆弱 硬依赖。 MEF不仅允许在内部重用扩展 应用程序,但也适用于各种应用程序。
最后,组件开发人员必须接受硬依赖 哪个程序集包含它们实现的接口。这样做 组件难以在多个应用程序中使用,以及 在为其创建测试框架时也会产生问题 组件。
因为MEF模型不需要特定的硬依赖 应用程序集,它允许重用扩展 申请。这也使得开发测试变得容易 线束,独立于应用程序,测试扩展组件。
有人可以向我解释一下吗?也许我误解了真正的依赖是什么?
答案 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使用后期绑定在运行时加载插件程序集。因此,您的主机没有明确依赖插件程序集,它唯一的依赖是插件契约程序集。