2008-11-28 41 views
2

我看到MEF和Lua之間的相似之處。兩者都允許您註冊方法並根據需要進行部署。既是MEF又是Lua形式的IoC /依賴注入?是MEF微軟的Lua版本嗎?

+0

它們完全不同。 – 2008-11-28 19:58:42

回答

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的一般定義在現代編程環境中並不特別有用。這太常見了。福勒說這就是爲什麼他將依賴注入作爲特例介紹。在GUI,事件,線程,守護進程,關閉,延續和monad的世界中,一切都使用IoC。今天,當人們說'IoC'時,他們通常意味着某種依賴注入。

5

MEF和Lua沒有任何關係,也不像Lua。

MEF是一個擴展框架(基本上,一個真棒插件框架)。

Lua是一個非常酷的腳本語言。 「

」兩者都允許您註冊方法並根據需要進行部署。「這句話適用於C,C++,C#,VB,SQL,DI框架,JavaScript,通用汽車,福特,醫院......

+0

我不明白「通用汽車,福特,醫院......「 – 2008-11-29 00:00:20