Я хочу прочитать имена очередей из файла docker -compose.override. Для этого я сделал их строковыми массивами и определил их следующим образом:
environment:
- RabbitMQOptions__ConnectionString=-rabbitmq
- RabbitMQOptions__BrokerName=event_demo
- RabbitMQOptions__QueueName=["sampleQueue", "daemonQueue"]
Docker. Но я не могу получить ни одно из значений из массива. Есть ли другой способ настроить эту переменную env.
Я вставляю значение из файла docker -compose через файл Startup.cs
services.AddSingleton<IEventBus, RabbitMQEventBus>(sp =>
{
var rabbitMQPersistentConnection = sp.GetRequiredService<IRabbitMQPersistentConnection>();
var logger = sp.GetRequiredService<ILogger<RabbitMQEventBus>>();
var eventBusSubcriptionsManager = sp.GetRequiredService<IEventBusSubscriptionManager>();
var options = sp.GetRequiredService<IOptionsMonitor<RabbitMQOptions>>();
return new RabbitMQEventBus(options.CurrentValue, eventBusSubcriptionsManager, rabbitMQPersistentConnection, logger, services);
});
И прямо здесь, в конструкторе, я получаю значение путем внедрения зависимости
public RabbitMQEventBus(
RabbitMQOptions options,
IEventBusSubscriptionManager subscriptionManager,
IRabbitMQPersistentConnection persistentConnection,
ILogger<RabbitMQEventBus> logger,
IServiceCollection services
)
{
_persistentConnection = persistentConnection;
_subsManager = subscriptionManager;
_options = options;
_queueName = _options.QueueName[0];
_consumerChannel = CreateConsumerChannel();
_subsManager.OnEventRemoved += SubsManager_OnEventRemoved;
_logger = logger;
_services = services;
BROKER_NAME = _options.BrokerName;
}
Вот класс RabbitMQOptions
public class RabbitMQOptions
{
public string ConnectionString { get; set; }
public string BrokerName { get; set; }
public string[] QueueName { get; set; }
}