Как ресурс удаляется, когда он зарегистрирован как services.AddSingleton, но инициируется с помощью блока using - PullRequest
0 голосов
/ 06 августа 2020

Я использую. NET Core 3.1.

У меня есть простой класс publi sh, предназначенный для публикации sh сообщений брокеру сообщений. Все logi c для брокера сообщений находятся в отдельной библиотеке классов, а самому классу publi sh нужно каким-то образом получить соединение, чтобы опубликовать sh сообщение, поэтому это выглядит так:

 public class Publisher : IPublisher
 {
    public void Publish(string subject, PublishMessage message)
    {
        var options = ConnectionFactory.GetDefaultOptions();

        using (var connection = new ConnectionFactory().CreateEncodedConnection(options))
        {
            connection.OnSerialize = jsonSerializer;
            connection.Publish(subject, message);
            connection.Flush();
        }
    }
 }

Кстати, new ConnectionFactory().CreateEncodedConnection(options) является родным для брокера сообщений, так что это не написанная мной оболочка.

Однако. В моем веб-проекте я регистрирую это в DI следующим образом:

services.AddSingleton<IPublisher, Publisher>();

Моя конечная цель - разделить одно и то же соединение, я знаю, что когда придет время, DI избавится от всех одноразовые ресурсы, но поскольку я оборачиваю соединение в блок using, он всегда удаляет соединение и создает новое для каждого сообщения, или DI каким-то образом с этим справляется. А если нет, то как сделать, чтобы соединение создавалось не для каждого сообщения?

1 Ответ

1 голос
/ 06 августа 2020

services.AddSingleton<IPublisher, Publisher>(); Создавать экземпляр класса Publisher при запуске приложения, но соединение будет создаваться и удаляться каждый раз, когда вы вызываете метод Publish.

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