我正在编写一个基于WinForms的IDE风格的应用程序。作为该应用程序的一部分,它加载了实现名为IFeature
的接口的插件。功能由主IDE框架通过MEF加载,然后要求实例化Control
的实例,然后将其添加到选项卡页面以形成插件的主要工作界面。到目前为止一切都很好。
我现在正在尝试保护IDE免受严重实现的插件的攻击,而且我对如何做到这一点完全没有好主意。例如,如果插件是一个抛出异常的按钮,则IDE框架代码根本不涉及该调用堆栈,因此我没有地方可以注入try-catch。我已经了解了AppDomain.CurrentDomain.UnhandledException
和Application.ThreadException
事件,这些事件为以这种方式抛出的异常提供了顶级保护,但我希望能够通过某些上下文捕获它们,以便异常可以绑定到导致问题的IFeature
实例。
我确实想过创建一个派生自Control
的类 - 然后覆盖各种方法并实现try-catch - 但是
一个。看起来很笨拙。
湾不会防止控制反过来控制这种方法
C。会阻止使用任何非自定义控件(例如,Panel
)
我是否可以使用任何其他方法为我的框架提供更接近原因的保护,或者我是否仍然坚持处理上述非常广泛的事件。
由于
马特
答案 0 :(得分:1)
总的来说,我不会为此付出过多的负担。
告诉插件开发人员,当你发现他们的控件滑动的异常时,你将删除对该控件的所有引用。
要做其他事情太难了,因为你必须设想控件可能做错的一切。
对于非UI插件,我会杀死appdomain。
删除所有引用可能不那么安全,这可能是为什么许多允许UI插件的程序不允许UI插件绘制UI,而是根据插件通过界面建议的内容绘制插件的UI。