【问题标题】:Is MEF Microsoft's version of Lua?MEF 是微软的 Lua 版本吗?
【发布时间】:2010-09-24 12:00:29
【问题描述】:

我看到了 MEF 和 Lua 之间的相似之处。两者都允许您注册方法并根据需要进行部署。 MEF 和 Lua 都是 IoC / 依赖注入的形式吗?

【问题讨论】:

  • 它们完全不同。

标签: comparison lua mef


【解决方案1】:

MEF 与 Lua 无关,和 Lua 一点也不像。

MEF 是一个扩展框架(基本上,一个很棒的插件框架)。

Lua 是一种非常酷的脚本语言。

“两者都允许您注册方法并根据需要进行部署。”这句话适用于 C、C++、C#、VB、SQL、DI 框架、JavaScript、通用汽车、福特、医院……

【讨论】:

  • 我不懂“通用汽车、福特、医院……”
  • 我想我被冲昏了头脑。有时我太愤世嫉俗了。
【解决方案2】:

我假设您已经意识到这些技术之间的巨大差异并关注以下问题:

“都是 MEF 和 Lua 形式的 IoC / 依赖注入?”

另外,我假设您说的是嵌入式 Lua 与 Lua 作为一种语言。

首先,让我们将依赖注入与控制反转分开。 Fowler defined Dependency Injection as a specific form of IoC 因为 IoC 的想法已经变得如此普遍,以至于它不再是系统的显着特征。他的定义包括三种主要类型的依赖注入:构造函数注入、Setter 注入和接口注入。在所有这三种类型中,其想法是将类或接口的特定实现注入到需要它的类或方法中。这非常巧妙,因为它允许您将依赖项和使用它的类解耦。只要他们遵守合同,您就可以编辑和交换依赖项的实现,而无需其消费者关心或受到影响。

使用这个定义,我会说 MEF 通过并且嵌入式 Lua 失败。 MEF 在很大程度上是一个依赖注入框架。它允许您动态加载和组合实现特定合同的外部类。另一方面,Lua 允许通过脚本进行扩展,但合同方式很少。当然,你可以为你的应用提供一个 Lua API,这是一种契约,但它并不能确保真正的契约得到遵守。

IoC 更广泛。(Fowler,Wikipedia) 共同的主题是主程序流暂时放弃控制,但接收来自正在工作的组件的流状态更新。实现这一点的常用方法包括:事件、闭包和延续。

使用这个定义,MEF 很容易通过(控制在运行时传递给未知组件),你也可以为嵌入式 Lua 做一个参数。主程序一直运行,直到它需要在外部脚本中定义的函数。此时,控制权将传递给脚本,直到它完成或被中断。

需要注意的一点是,Lua 在这方面并不是特别特别。您可以嵌入 Perl、Python、Tcl 和 Ruby。事实上,IoC 的一般定义在现代编程环境中并不是特别有用。这太常见了。 Fowler 说这就是他引入依赖注入作为特例的原因。在 GUI、事件、线程、守护进程、闭包、延续和单子的世界中,一切都使用 IoC。今天,当人们说“IoC”时,他们通常指的是某种依赖注入。

【讨论】:

    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 2013-02-10
    • 2014-12-07
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多