2

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

4

2 回答 2

8

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

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

另外,我假设您正在谈论嵌入式 Lua 与 Lua 作为一种语言。

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

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

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

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

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

于 2008-11-30T06:41:44.300 回答
5

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

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

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

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

于 2008-11-28T20:26:16.070 回答