C#:通过单例类访问类的实例时,如何修复System.TypeInitializationException?

时间:2019-02-10 00:22:42

标签: c# winforms class singleton

异常详细信息: enter image description here我正在尝试从单例类中检索表单的实例,但是我遇到了System.TypeInitializationException:''form.Single'的类型初始值设定项引发了异常。'

单个类如下所示。

class Single
{
    public Form1 Form { get; private set; }
    public Menu MenuForm { get; private set; }
    public RandomFacts RandomFactsForm { get; private set; }
    public QuizMenu QuizMenuForm { get; private set; }
    public AskHowManyQuestions AskHowManyQuestionsForm { get; private set; }

    private static readonly Form1 _form1 = new Form1();
    private static readonly Menu _menu = new Menu();
    private static readonly RandomFacts _randomFacts = new RandomFacts();
    private static readonly QuizMenu _quizMenu = new QuizMenu();
    private static readonly AskHowManyQuestions _askHowManyQuestions = new AskHowManyQuestions();

    private static readonly Single _single = new Single();

    private Single()
    {
        Form = _form1;
        MenuForm = _menu;
        RandomFactsForm = _randomFacts;
        QuizMenuForm = _quizMenu;
        AskHowManyQuestionsForm = _askHowManyQuestions;
    }

    public static Single GetSingle()
    {
        return _single;
    }

Form1类中的代码引发TypeInitializationException,该异常旨在检索该类的实例:

var MenuForm = Single.GetSingle().MenuForm;

如何阻止引发此异常?感谢您的阅读。

1 个答案:

答案 0 :(得分:0)

该异常表示您的静态初始化中的某些操作引发了异常。困难之处在于您的类在静态初始化器中创建了5个对象,并且您不知道哪个对象引发了异常。

我现在将摆脱单例模式,而摆脱实例方法,直到您弄清楚问题出在哪里。然后,如果您需要一个单例模式(目前尚不清楚原因),并且如果问题可能在野外发生,则添加异常处理和/或日志记录以识别运行时出现问题。

请注意,我不会将您的课程称为Single。已经有一个名为Single的框架类,偶然的观察者(例如我)会被它迷惑。我称其为更具描述性的内容(SingletonFormManager或类似名称)。