【发布时间】:2009-11-09 09:21:07
【问题描述】:
我正在开发一个 Silverlight 3 应用程序,我想将所有意外错误处理委托给一个我命名为 ErrorHandler 的类的单个实例。这个类有一个名为 HandleApplicationException 的方法,以及一些其他方法来处理更专业的错误。
在我的应用程序中,我使用 Unity 进行依赖注入,但由于我希望即使尚未设置 Unity 容器也可以使用错误处理对象,所以我在 App 类构造函数中将该对象注册为 AppDomain 全局数据,这样:
public App()
{
this.Startup += this.Application_Startup;
this.Exit += this.Application_Exit;
this.UnhandledException += this.Application_UnhandledException;
AppDomain.CurrentDomain.SetData("ErrorHandler", new ErrorHandler());
InitializeComponent();
}
如果出现未处理的异常,我会检索错误处理程序对象并以这种方式使用它:
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
e.Handled = true;
var errorHandler = AppDomain.CurrentDomain.GetData("ErrorHandler") as ErrorHandler;
Debug.Assert(errorHandler != null, "No ErrorHandler registered.");
errorHandler.HandleApplicationException(e.ExceptionObject);
}
问题是Application_UnhandledException 方法中的AppDomain.GetData 方法抛出了MethodAccessException。我不明白为什么,因为我只是在 AppDomain 类上调用一个公共方法。我在其他应用程序中使用了类似的方法,并且效果很好(无论如何这些不是 Silverlight 应用程序)。
那么,发生了什么事?我是不是做错了什么?
【问题讨论】:
标签: silverlight silverlight-3.0 error-handling