我在写一个基于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。 –