Я использую. 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 каким-то образом с этим справляется. А если нет, то как сделать, чтобы соединение создавалось не для каждого сообщения?