【发布时间】:2010-09-24 12:00:29
【问题描述】:
我看到了 MEF 和 Lua 之间的相似之处。两者都允许您注册方法并根据需要进行部署。 MEF 和 Lua 都是 IoC / 依赖注入的形式吗?
【问题讨论】:
-
它们完全不同。
标签: comparison lua mef
我看到了 MEF 和 Lua 之间的相似之处。两者都允许您注册方法并根据需要进行部署。 MEF 和 Lua 都是 IoC / 依赖注入的形式吗?
【问题讨论】:
标签: comparison lua mef
MEF 与 Lua 无关,和 Lua 一点也不像。
MEF 是一个扩展框架(基本上,一个很棒的插件框架)。
Lua 是一种非常酷的脚本语言。
“两者都允许您注册方法并根据需要进行部署。”这句话适用于 C、C++、C#、VB、SQL、DI 框架、JavaScript、通用汽车、福特、医院……
【讨论】:
我假设您已经意识到这些技术之间的巨大差异并关注以下问题:
“都是 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”时,他们通常指的是某种依赖注入。
【讨论】: