【问题标题】:Explain how MEF doesn't have hard dependency on assemblies解释 MEF 如何对程序集没有硬依赖
【发布时间】:2012-04-23 05:04:31
【问题描述】:

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

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


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


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

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

【问题讨论】:

    标签: .net mef


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      一个插件:

      public class SomePlugin : IPlugin
      {
          // Operations
      }
      

      插件合约:

      public interface IPlugin { }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        • 2021-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多