Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight AppDomain.GetData方法不可访问?_Silverlight_Silverlight 3.0_Error Handling - Fatal编程技术网

Silverlight AppDomain.GetData方法不可访问?

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 +=

我正在开发一个Silverlight 3应用程序,我希望将所有意外错误处理委托给我命名为
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容器尚未创建时仍然可用。