как создать статический масив из обьектов в контролере, что бы он не перезаписывался каждый раз

Рейтинг: 0Ответов: 1Опубликовано: 21.01.2023

У меня есть классическое приложение написанное на платформе ASP.NET (MVC WEB APP).
В контроллере HomeController я хочу создать такой массив из обьектов нужного мне класса, что бы при записи в этот масив новых обьектов он не перезаписывался, а просто добавлял в себя новые элементы.

К примеру:

Это кусочек кода из контроллера HomeController. Здесь я создаю статический масив из обьектов что бы можна було к нему обратиться не создавая обьекта класа.

...

public static List<Person> personMessages { get; set; }


public HomeController()
{
    personMessages = new List<Person>();
}

...

А это код из другого класса, в котором я добавляю новые обьекты в этот масив.

...

HomeController.personMessages.Add(personObj);
Console.WriteLine("Array count: " + HomeController.personMessages.Count);

...

Когда мое приложение работает, то после кажного добавления нового обьекта - длина массива всегда будет равна 1 и он будет содержать последний добавленный обьект.

Как решить мою проблему и создать что то на подобии репозитирия данных (мой массив personMessages)?

Ответы

▲ 0

У тебя свойство personMessages статическое, а конструктор HomeController нет. Каждый раз создавая экземпляр HomeController, ты пересоздаёшь personMessages, то есть старый personMessages "затирается" новым, и ты уже в новый добавляешь значения. Возможно нужно просто перенести инициализацию personMessages из HomeController в другое место, в статический конструктор например:

public static List<Person> personMessages { get; set; };

static HomeController()
{
    personMessages = new List<Person>();
}

public HomeController()
{
    //personMessages = new List<Person>(); это переносим в статический конструктор,
    //если в этом конструкторе больше ничего не делается, то его можно вообще удалить
}