Я хочу сделать следующее.
Я реализовал планировщик с Quartz.Net и для IOC я использую Autofac.
Теперь я хочу начать одну работу несколько раз, но база данных для каждой работы различна. Мой репозиторий принимает параметр, который оборачивает мою строку подключения.
Параметр имеет тип IOptions<T>
и вводится в конструктор хранилища. Хранилище также внедряется в разные сервисы.
Проблема в том, что я не могу получить доступ к репозиторию напрямую, потому что задействовано много сервисов, которые все используют один и тот же репозиторий.
Хранилище реализовано кем-то другим и содержит несколько запросов и одно свойство строки подключения. У меня есть разные базы данных для разных стран (системы продаж), но все они одинаковы, поэтому у меня есть только один репозиторий для всех баз данных.
Строки подключения считываются из файла JSON:
{
"PriceListSettings": [
{
"Country": "DE",
"ConnectionString": "Initial Catalog=Catalog_DE;Data Source=.\\SQLEXPRESS;Integrated Security=true;",
"ExecutionTime": "0 0 0 1/1 * ? *"
},
{
"Country": "AT",
"ConnectionString": "Initial Catalog=Catalog_AT;Data Source=.\\SQLEXPRESS;Integrated Security=true;",
"ExecutionTime": "0 0 0 1/1 * ? *"
}
]
}
Я хочу иметь область действия для каждой работы, чтобы я мог внедрить или установить другую строку подключения.
С Quarz вы можете установить триггер. Проблема в том, что все задания запускаются в настраиваемое время и должны выполняться один раз за ночь. Но я точно не знаю, когда.
Я пытался использовать
using (var scope = Program.Container.BeginLifetimeScope())
{
//Does not seem to work this way
//var repo = scope.Resolve<IRepository>();
//repo.PricelistServiceConfig = priceListConfig;
}
Я также пытался запустить Quartz в одном потоке, но, похоже, я не могу правильно установить свойство моего репо.
Используемые каркасы:
- .Net Framework 4.6 (невозможно обновить)
- Autofac 4.8.1
- Autofac.Extras.Quartz 4.2.0
- Кварц 3.0.6