C #: как исправить System.TypeInitializationException при доступе к экземпляру класса через одноэлементный класс? - PullRequest
0 голосов
/ 10 февраля 2019

Сведения об исключении: enter image description here Я пытаюсь получить экземпляр формы из одноэлементного класса, но получаю System.TypeInitializationException: 'инициализатор типа для' form.Single 'вызвал исключение. '

Класс Singleton показан ниже.

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 голосов
/ 11 февраля 2019

Исключение означает, что что-то в вашей статической инициализации вызывает исключение.Сложность состоит в том, что ваш класс создает 5 объектов в статических инициализаторах, и вы не представляете, какой из них вызывает исключение.

Я бы на данный момент избавился от шаблона синглтона и только от методов экземпляра, пока вы не выясните, чтопроблема в.Затем, если вам нужен шаблон синглтона (непонятно, почему вы делаете это в данный момент), и если проблема может возникнуть в дикой природе, то добавьте обработку исключений и / или ведение журнала, чтобы иметь возможность идентифицироватьпроблема во время выполнения.

Как примечание, я бы НЕ назвал ваш класс Single.Уже существует базовый класс под названием Single, который может привести в замешательство случайных наблюдателей (таких как я).Я бы назвал это чем-то более информативным (SingletonFormManager или что-то в этом роде).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...