Где следует размещать классы с долгоживущими соединениями в ASP.NET Core? - PullRequest
0 голосов
/ 10 февраля 2019

Сейчас я использую класс с сокетом в качестве свойства, но я хотел бы знать, как лучше обрабатывать этот случай.Класс регистрируется как одиночный в DI, а метод Connect в сокете вызывается в конструкторе.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Вы можете использовать IHostedService

Они были разработаны в качестве основного средства для запуска долгосрочных задач в фоновом режиме.

В основном вам нужно создать класс, который содержитваши связи, реализующие IHostedService.(Если вы используете .NET Core 2.1+, вы можете легко сделать это, извлекая из BackgroundService и переопределяя ExecuteAsync.

Затем вы просто регистрируете свой класс как одиночный при запуске (services.AddSingleton<IHostedService, YourHostedService>()), ифреймворк автоматически распознает его и управляет запуском и остановкой.

Есть два преимущества:

  1. Вам не нужно беспокоиться (так много)Что касается многопоточности, хост будет обрабатывать планирование вашей задачи.
  2. Фреймворк будет обрабатывать запуск и постепенное отключение для вас. Все это работает так, как вы уже знаете: использование CancellationToken с настраиваемым временем ожидания.
  3. Поскольку класс зарегистрирован как обычный синглтон через контейнер IoC, вы можете получить к нему доступ через DI, как и любой другой класс. (Конечно, тогда вам нужно зарегистрировать его, используя другой интерфейс, а не просто IHostedServiceЭто позволяет вам вызывать методы на вашем менеджере сокетов из ваших контроллеров и т. Д.можно найти и других:
0 голосов
/ 10 февраля 2019

Один хороший способ - создать метод расширения, например UseMySocket, нацеленный на тип IWebHostBuilder.Вы можете использовать это в CreateWebHostBuilder методе вашего Program класса.Имейте в виду, что вы должны реализовать это таким образом, чтобы не блокировать текущий поток.Например:

WebHost.CreateDefaultBuilder(args)
.UseMySocket()
.UseStartup<Startup>();

Другим методом будет создание одноэлементного типа для сокета с последующим его созданием и внедрением в коллекцию сервисов в методе ConfigureServices в классе Startup.

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