代码之家  ›  专栏  ›  技术社区  ›  Konamiman

AppDomain.GetData方法不可访问?

  •  1
  • Konamiman  · 技术社区  · 15 年前

    我正在开发一个Silverlight3应用程序,我想将所有意外错误处理委托给我命名的类的一个实例 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);
    }
    

    问题是 AppDomain.GetData 中的方法 Application_UnhandledException 方法是抛出一个 MethodAccessException

    2 回复  |  直到 15 年前
        1
  •  1
  •   Konamiman    15 年前

    好的,我知道了。从…起 MSDN documentation :

    SecurityCriticalAttribute属性, 这就限制了它的内部使用 Silverlight的.NET框架 类库。应用程序代码

    ((App)Application.Current).ErrorHandler . 我不喜欢这样做,但我想在这种特殊情况下也可以。

        2
  •  0
  •   JustinAngel    15 年前

    为什么不能使用ErrorHandler的静态实例呢?也就是说,有像ErrorHandler.Current这样的东西吗?

    老实说,看起来您正试图手动构建一个穷人的IoC框架。 考虑对Undo/Nin进行一些研究,看看为什么强类型的解耦更好。

    推荐文章