【问题标题】:AppDomain.GetData method not accessible?AppDomain.GetData 方法不可访问?
【发布时间】: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


    【解决方案1】:

    好的,我明白了。来自MSDN documentation

    此会员有一个 SecurityCriticalAttribute 属性, 这将其限制为内部使用 Silverlight 的 .NET 框架 类库。应用程序代码 使用这个成员抛出一个 方法访问异常。

    我已将错误处理程序存储在 App 类的公共属性中,然后我使用 ((App)Application.Current).ErrorHandler 访问它。我不喜欢这样做,但我想在这种特殊情况下是可以的。

    【讨论】:

      【解决方案2】:

      为什么不能只使用 ErrorHandler 的静态实例? IE。有类似 ErrorHandler.Current 的东西吗?

      老实说,您似乎正在尝试手动构建一个穷人的 IoC 框架。 考虑对 Unity/Ninject 做一些研究,看看为什么强类型解耦更好。

      【讨论】:

      • 正如我在问题中解释的那样,我实际上是在应用程序中使用 Unity;但这是一种特殊情况,因为即使尚未创建 Unity 容器,我也希望该对象可用。
      猜你喜欢
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      相关资源
      最近更新 更多