我看到MEF和Lua之间存在相似之处。两者都允许您注册方法并根据需要进行部署。是MEF还是Lua形式的IoC /依赖注入?
答案 0 :(得分:8)
我假设您已经意识到这些技术之间的巨大差异,并专注于这个问题:
“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,事件,线程,守护进程,闭包,延续和monad的世界中,一切都使用IoC。今天,当人们说'IoC'时,他们通常意味着某种依赖注入。
答案 1 :(得分:5)
MEF与Lua无关,与Lua完全不同。
MEF是一个扩展框架(基本上是一个很棒的插件框架)。
Lua是一种非常酷的脚本语言。
“两者都允许您注册方法并根据需要进行部署。”那句话适用于C,C ++,C#,VB,SQL,DI Frameworks,JavaScript,通用汽车,福特,医院...