我在寫一個基於WinForms的IDE風格的應用程序。作爲該應用程序的一部分,它會加載實現了一個名爲IFeature
的接口的插件。功能由主IDE框架通過MEF加載,然後要求實例化Control
的實例,然後將實例添加到選項卡頁面以形成插件的主要工作表面。到現在爲止還挺好。防止WinForms中子控件拋出的異常
我現在正在努力保護IDE不受惡意實現的插件的影響,而且我完全不知道如何做到這一點。例如,如果一個插件是一個引發異常的按鈕,那麼IDE框架代碼根本就不涉及該調用堆棧,所以我沒有注入try-catch的地方。我已經吸引了AppDomain.CurrentDomain.UnhandledException
和Application.ThreadException
事件,這些事件爲以這種方式拋出的異常提供了頂級保護,但我希望能夠在某種情況下捕獲它們,以便可以將異常與IFeature
實例關聯起來對這個問題負責。
我確實有創造從Control
派生的類的想法 - 然後壓倒一切的各種方法和實施的try-catch - 但
一個。似乎笨拙。 b。不能防止控制反過來影響該方法。
c。可以防止使用任何非定製控件(例如,Panel
)
是否有任何其他方法可用於爲我的框架提供更接近原因的保護,或者我堅持處理非常廣泛的範圍事件如上。
感謝
馬特
我的印象是,你不能分開AppDomains的控件在同一個窗體上 - 我錯過了什麼嗎?謝謝。 –
是的。對於非UI插件,我會殺死appdomain。對於一個UI控件,我只是刪除對它的引用。這並不安全,可能爲什麼許多允許UI插件的程序不允許插件繪製UI,而是基於插件通過接口提供的內容爲插件繪製UI。 –