我看到MEF和Lua之间的相似之处.两者都允许您注册方法并根据需要进行部署.是MEF还是Lua形式的IoC /依赖注入?
我假设您已经意识到这些技术之间存在巨大差异,并专注于这个问题:
"MEF和Lua形式的IoC /依赖注入都是吗?"
另外,我假设你在谈论嵌入式Lua和Lua作为一种语言.
首先,让我们将依赖注入与控制反转分开.Fowler将依赖注入定义为IoC的一种特定形式,因为IoC的概念变得如此普遍,以至于它不再是系统的一个显着特征.他的定义包括三种主要类型的依赖注入:构造函数注入,Setter注入和接口注入.在所有这三种类型中,我们的想法是将类或接口的特定实现注入需要它的类或方法中.这很漂亮,因为它允许您解耦依赖项和使用它的类.只要他们遵循合同,您就可以编辑和交换依赖关系的实现,而无需消费者关心或受影响.
使用这个定义,我会说MEF通过并且嵌入式Lua失败了.MEF主要是依赖注入框架.它允许您动态加载和组合实现特定合同的外部类.另一方面,Lua允许通过脚本进行扩展,但合同的方式很少.当然,您可以为您的应用程序提供Lua API,这是一种合同,但它无法确保真正的合同得到尊重.
IoC更广泛.(福勒,维基百科)常见的主题是主程序流暂时放弃控制,但从正在进行工作的组件接收流状态更新.实现此目标的常用方法包括:事件,闭包和延续.
使用此定义,MEF可以轻松传递(控件在运行时传递给未知组件),您也可以为嵌入式Lua创建参数.主程序一直巡航,直到它需要在外部脚本中定义的函数.此时,控制将传递给脚本,直到完成或中断为止.
有一点需要注意的是,Lua在这方面并不是特别特别.您可以嵌入Perl,Python,Tcl和Ruby.事实上,IoC的一般定义在现代编程环境中并不特别有用.这太常见了.Fowler说这就是为什么他将依赖注入作为特例引入的原因.在GUI,事件,线程,守护进程,闭包,延续和monad的世界中,一切都使用IoC.今天,当人们说'IoC'时,他们通常意味着某种依赖注入.
MEF与Lua无关,与Lua完全不同.
MEF是一个扩展框架(基本上是一个很棒的插件框架).
Lua是一种非常酷的脚本语言.
"两者都允许您注册方法并根据需要进行部署." 那句话适用于C,C++,C#,VB,SQL,DI Frameworks,JavaScript,通用汽车,福特,医院......