Я хочу сделать следующее.
Я реализовал планировщик с 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 (невозможно обновить)
- Автофак 4.8.1
- Autofac.Extras.Quartz 4.2.0
- Кварц 3.0.6
Job
, который берет пустой экземпляр репозитория и параметры конфигурации, а затем загружает репозиторий. - person Dennis Kuypers   schedule 12.09.2018