1

我正在编写一个基于 WinForms 的 IDE 风格的应用程序。作为该应用程序的一部分,它会加载实现名为IFeature. 功能由主 IDE 框架通过 MEF 加载,然后要求实例化 的实例Control,然后将其添加到选项卡页以形成插件的主要工作表面。到目前为止,一切都很好。

我现在正在努力保护 IDE 免受实施不当的插件的影响,但我对如何做到这一点没有好主意。例如,如果插件是一个引发异常的按钮,那么 IDE 框架代码根本不涉及该调用堆栈,因此我没有地方可以注入 try-catch。我已经连接到AppDomain.CurrentDomain.UnhandledExceptionandApplication.ThreadException事件,它提供了针对以这种方式抛出的异常的顶级保护,但我希望能够在某些上下文中捕获它们,以便可以将异常绑定到IFeature负责的实例问题。

我确实有创建一个派生类的想法Control- 然后覆盖各种方法并实现 try-catch - 但是

一个。显得笨拙。
湾。不会防止控件反过来覆盖该方法。
C。将阻止使用任何非自定义控件(例如,Panel

是否有任何其他方法可以用来为我的框架提供更接近原因的保护,或者我是否坚持处理上述范围非常广泛的事件。

谢谢

马特

4

1 回答 1

1

总的来说,我不会为此负担太多。

只需告诉插件开发人员,当您捕获到他们的控件漏掉的异常时,您将删除对该控件的所有引用。

做其他任何事情都太难了,因为您必须设想控件可能做错的所有事情。

对于非 UI 插件,我会杀死 appdomain。

删除所有引用可能不那么安全,这可能就是为什么许多允许 UI 插件的程序不允许插件绘制 UI,而是根据插件通过界面建议的内容为插件绘制 UI。

于 2012-05-31T11:48:45.863 回答