2016-01-20 67 views
1

我正在設計一個解決方案,我相信它可以在插件式架構中很好地工作。c#在不重新啓動的情況下添加/刪除動態插件

「主程序」將提供服務,如數據庫訪問,消息到遠程客戶端,日誌記錄和其他功能。

每個「插件」將能夠使用這些功能,幷包含將執行「插件」特定邏輯的自定義功能。

我需要能夠在沒有重新啓動「主程序」的情況下在運行時安裝和卸載插件。當「插件」的新版本可用並需要添加到「主程序」時,卸載將主要發生。

如果我創建每個插件作爲DLL並將其放置在一個文件夾中我可以發信號通知「主程序」加載它們,一切都很好。我不確定的是如何在不再需要時正確卸載它們,而不會造成內存泄漏。

如果我在程序集上執行Application.Load,卸載它的唯一方法是卸載整個AppDomain。我對AppDomain的工作方式不太瞭解,但這似乎會導致問題。

有沒有人做過這種事情之前,可以提供一些建議最好的方式來做到這一點,而不會造成不穩定或內存泄漏?

回答

1

通常,您需要將每個插件加載到它自己的AppDomain中。沒有其他方法可以使其無法加載。它不會造成任何內存泄漏(如果你自己不做)。如果你正確實施,它是穩定的。這不是一件容易的事情,但是這個話題太大而無法詳細解釋,寧可拿一篇大文章或一本書。

+0

這就是我的想法。希望有一個更好的方法來做到這一點,但有時候,漫長的道路我認爲最終會更好。 – Kelly

+0

@Kelly你可以嘗試找到一個庫。但MEF是最受歡迎的插件庫,不適用於appdomains。我幾乎肯定Github上有一些例子。 –

+0

謝謝我已經使用了MEF合理的數量,你的權利,這不正是我在這裏尋找。我有足夠的時間來窺探,看看我能找到什麼。 – Kelly

相關問題