ASP.NET Core Замена одиночного экземпляра во время выполнения - PullRequest
0 голосов
/ 13 января 2019

Мне нужно хранить объект в памяти на протяжении всего жизненного цикла приложения ASP.NET Core, в котором я сериализую этот объект и сохраню его в долговременном хранилище в качестве снимка. Позже в жизненном цикле объекта мне нужно восстановить состояние этого объекта, десериализовав его и заменив синглтон. Это не обязательно должен быть одиночный объект, но я должен гарантировать, что существует только один экземпляр объекта.

Я попробовал следующее, но, похоже, он заменяет его только для текущего запроса и ничего после этого. Я предполагаю, что контейнер DI создает свою собственную копию объекта, но я не уверен

internal static SingleObject SingleObject { get; set; } = new SingleObject();

services.AddSingleton<OrderBook>(SingleObject)

Есть ли способ заменить одноэлементный экземпляр или мне нужно будет бросить свой собственный одноэлементный класс, который обрабатывает этот сценарий?

Ответы [ 2 ]

0 голосов
/ 22 июля 2019

Я бы предложил вам прочитать Как настроить службы на основе запроса в ASP.NET Core .

После этого (контейнер строится), регистрация не может быть изменена больше. @ Цзэн

Вы можете зарегистрировать области только один раз во время запуска, чтобы вы могли зарегистрировать функции, связанные с тем, что вы хотите обновить / обновить позже. Я бы порекомендовал, если у вас есть что-то, что нужно изменить, реализуя кеш или в памяти, чтобы вы запускали обновление при желании.

0 голосов
/ 13 января 2019

С https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.2:

Singleton

Службы времени жизни Singleton создаются при первом запросе (или когда запускается ConfigureServices и экземпляр указывается при регистрации службы). Каждый последующий запрос использует один и тот же экземпляр. Если приложение требует одноэтапного поведения, рекомендуется разрешить контейнеру службы управлять временем жизни службы. Не реализуйте шаблон проектирования Singleton и не предоставляйте пользовательский код для управления временем жизни объекта в классе.

Итак, вам не нужно реализовывать шаблон Singleton для себя. DI позаботится об этом.

Единственное, что вы должны сделать сейчас, это сделать инъекцию.

Зарегистрируйтесь следующим образом:

services.AddSingleton<SingleObject>(new SingleObject())

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