Silverlight AppDomain.GetData方法不可访问?
我正在开发一个Silverlight 3应用程序,我希望将所有意外错误处理委托给我命名为Silverlight AppDomain.GetData方法不可访问?,silverlight,silverlight-3.0,error-handling,Silverlight,Silverlight 3.0,Error Handling,我正在开发一个Silverlight 3应用程序,我希望将所有意外错误处理委托给我命名为ErrorHandler的类的单个实例。这个类有一个名为handlapplicationexception的方法,还有两个其他方法来处理更专门的错误 在我的应用程序中,我使用Unity进行依赖项注入,但由于我希望错误处理对象即使在Unity容器尚未设置时也可用,因此我在App类构造函数中将该对象注册为AppDomain全局数据,方法如下: public App() { this.Startup +=
ErrorHandler
的类的单个实例。这个类有一个名为handlapplicationexception
的方法,还有两个其他方法来处理更专门的错误
在我的应用程序中,我使用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);
}
如果出现未处理的异常,我将检索错误处理程序对象,并按如下方式使用它:
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\u UnhandledException
方法中的AppDomain.GetData
方法正在抛出MethodAccessException。我不明白为什么,因为我只是在AppDomain类上调用一个公共方法。我在其他应用程序中使用了类似的方法,效果很好(无论如何,这些不是Silverlight应用程序)
那么,发生了什么事?我做错什么了吗?好的,我明白了。发件人:
这个成员有一个
SecurityCriticalAttribute属性,
这就限制了它的内部使用
Silverlight的.NET框架
类库。应用程序代码
使用此成员抛出
MethodAccessException
我求助于将错误处理程序存储在App类的公共属性中,然后使用((App)Application.Current).ErrorHandler
访问它。我不喜欢这样做,但我想在这种特殊情况下也可以。好的,我明白了。发件人:
这个成员有一个
SecurityCriticalAttribute属性,
这就限制了它的内部使用
Silverlight的.NET框架
类库。应用程序代码
使用此成员抛出
MethodAccessException
我求助于将错误处理程序存储在App类的公共属性中,然后使用
((App)Application.Current).ErrorHandler
访问它。我不喜欢这样做,但我想在这种特殊情况下也可以。为什么不能使用ErrorHandler的静态实例?也就是说,有像ErrorHandler.Current这样的东西吗
老实说,看起来您正试图手动构建一个穷人的IoC框架。
考虑对Ung/Nin进行一些研究,并了解为什么强类型的解耦是更好的。 为什么不能使用ErrorHandler的静态实例?也就是说,有像ErrorHandler.Current这样的东西吗 老实说,看起来您正试图手动构建一个穷人的IoC框架。
考虑对Ung/Nin进行一些研究,并了解为什么强类型的解耦是更好的。 正如我在问题中所解释的,我实际上在应用程序中使用了Unity;但这是一种特殊情况,因为我希望对象在Unity容器尚未创建时仍然可用;但这是一个特例,因为我希望对象在Unity容器尚未创建时仍然可用。