2010-12-13 52 views
4

我想了解插件架構。特別是在Windows Live Writer的實施中使用的一個。我指的是可以通過添加/刪除DLL(+ config)來配置/啓用/禁用/添加/刪除附加功能的樣式。插件架構

我希望看到類似的基於Web的應用程序的東西。任何人都可以請我指出正確的方向?

在此先感謝。

-SK

回答

0

基本上你需要從一個指定的目錄使用AssemblyLoader加載程序集在運行時,然後創建一個實例,並調用它。

Assembly assembly = Assembly.LoadFrom("myAssembly.dll"); 
    Type type = assembly.GetType("theType"); 
    object myInstance = Activator.CreateInstance(type); 

它的工作原理最好的,如果你所有的插件實現暴露出一定的方法......像負載的接口()。那麼你可以這樣做:

myInstance.Load() 

只要你將myInstance投射到你的接口。

+3

問題在於它會造成安全風險。最好使用「AppDomain」加載到沙箱中。 – James 2010-12-13 21:24:48

3

看看這個article。簡而言之,您需要在高層次上進行以下操作。

  1. 定義一個插件必須實現
  2. 創建子目錄與該插件的DLL特定權限住
  3. 定義配置部分或文件,指定動態加載的類型的接口從插件DLL。
  4. 加載DLL從插件配置&目錄到一個安全沙盒中使用一個AppDomain

我希望這可以幫助的。

0

簡單地通過添加一個或多個DLL來自動檢測插件封裝在System.Addin命名空間中。每次重新啓動程序時,它都會添加/刪除給定的插件。正如你所看到的,它不會做的是在程序仍在運行時添加/刪除一個插件。如果您需要該功能,則需要添加自己的文件事件機制來擴充System.Addin代碼,以便通知您添加或刪除了DLL。當然,如果你想刪除一個DLL,但是這個DLL一定不能有文件鎖定。爲了達到這個目的,你需要開啓ShadowCopy來執行每個DLL。

1

你的問題被標記爲ASP.NET,但我沒有看到任何ASP.NET特定的東西在你的問題。可插入的ASP.NET是可能的,但很難使用System.AddIn,也就是MAF。我設法在大約4天內創建了一個安全的網站插件概念證明。

http://suburbandestiny.com/Tech/?p=585

http://suburbandestiny.com/Tech/?p=588

很酷的事情終於能夠運行一個外接的最小信任的dll,而主機應用程序全部或中等信任跑。

我最終得出結論:System.AddIn是爲了解決Microsoft Office面臨的AddIn挑戰而創建的,而不是爲web.app創建AddIn的挑戰。

MEF應該是做附加模式的新事物,但我沒有任何經驗。 MEF旨在成爲一個通用的解決方案,而不僅僅是爲了解決MS Office團隊中的問題,所以它更有希望。

+0

MEF不取代MAF。 MEF是關於可擴展性的,MAF是關於隔離性的。 – 2010-12-13 22:24:16