淺談C#中一種類插件系統編寫的簡單方法(插件間、插件宿主間自己不須要通訊)

文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/前端

1.背景

三年多前還在上研時,用C#+反射機制寫過插件系統,後來又用MEF寫過插件系統。插件系統自己具備易於擴展的優點,因此在實際項目中使用很頻繁。即便在B/S項目中,插件的思想也是大行其道,好比前端單頁面+AMD編程即可以理解爲一種插件機制,以及後臺擴展項目統一打包爲一個jar放入主系統jar文件中一塊兒發佈,也能夠理解爲插件思想的運用。編程

這裏咱們回到C/S插件系統編寫的問題上。因爲以前諸多項目編寫是將插件編譯成dll,而後進行解析。這樣作有其好處,即宿主中能夠對各個模塊解析,完成插件間、插件和主程序間的通訊。可是在實際項目中,一樣也有其劣勢:微信

a.每個插件被編譯成了dll,各模塊沒法單獨運行,必須依託於主程序。多線程

b.修改插件時,因爲生成的是dll,沒法快速直觀的查看修改以及調試。插件

c.每個插件必須依賴於某一個規範。線程

當咱們並不須要插件之間、插件和主程序之間有通訊發生時,咱們是否能夠捨棄這種dll插件形式呢?設計

2.設計思路

此項目背景,即各模塊之間無需通訊。而且爲了適應各模塊能獨立運行以及各模塊須要單獨調試的需求,這裏我直接將各模塊設計爲單獨的系統,即編譯後生成exe。在主系統中,經過對配置文件的解譯,生成界面以及綁定相關回調事件。各插件exe以配置規則放入主程序文件夾下便可。3d

                       

3.進一步探討

a.C#調用exe,使用Process和 ProcessStartInfo配合完成。調試

 

 b.完成各模塊(exe)的單例模式。blog

因爲是直接調用exe,沒法利用傳統的單例模式實現。這裏能夠作一個字典表來存儲,目前哪些模塊已經被調用。

可是,當循環監聽模塊是否退出時,會致使系統卡頓,這裏使用多線程來進行模塊開啓,解決監聽模塊致使的界面卡頓。

 

 c.主程序退出時,全部模塊(exe)退出。

用字典表存儲各模塊的實際進程,主程序退出時,將各進程殺死關閉。

 

4.項目例子展現

宿主界面:

 

點擊服務發佈模塊:

 

 

 

                                                                                           -----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

                                                                                   若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                          

相關文章
相關標籤/搜索