Это основной проект dotNet 2.2, использующий Microsoft.Extensions.DependencyInjection.
У меня есть 3 класса.Класс A использует класс B в конструкторе.Класс B использует класс C, а класс C использует интерфейс ITenant.
ITenant определяет, какая база данных будет использоваться.
пример:
public A(IB b)
public B(IC c)
public C(ITenant t)
Они настроены вКонтейнер впрыска выглядит следующим образом:
services.AddTransient<IA, A>();
services.AddTransient<IB, b>();
services.AddTransient<IC, c>();
services.AddTransient<ITenant , HttpTenant>()>();
В веб-проекте контроллер использует класс A в качестве параметра конструктора, а также контейнер createClass A и все его зависимости.Реализация ITenant (HttpTenant) извлекает имя клиента из заголовка HTTP-запроса и получает информацию базы данных из файла конфигурации.Все работает отлично.
Теперь мне нужно вызвать это из службы Windows, которая не включает HTTP-запрос.У меня есть обработчик, который отвечает на очередь сообщений, и класс A является параметром конструкции.Для службы Windows у меня есть другой ITenant (WindowServiceTenant):
services.AddTransient<ITenant , WindowServiceTenant>()>();
Я не могу понять, как получить код арендатора в WindowServiceTenant.
- Арендатор определяется при запускевремя, основанное на чтении значения из очереди сообщений.
- К моменту создания экземпляра моего обработчика также создается экземпляр WindowServiceTenant.
- Я не знаю арендатора до установки обработчика.
Мне нужно получить ссылку на этот экземпляр WindowServiceTenant и предоставить клиента.Или эта реализация WindowServiceTenant нуждается в ссылке на обработчик, который инициировал создание экземпляра.
Есть идеи?