В WebJobs 3.0 они предлагают использовать внедрение зависимостей через ConfigureServices ()
Однако службы, добавленные с помощью AddScoped()
, ведут себя точно так же, как и AddSingleton()
:они настроены на время жизни WebJob.Я бы предпочел, чтобы он был ограничен для каждого вызова функции.Как мы можем достичь этого?
Я попытался использовать свой собственный активатор заданий и сделать что-то вроде этого:
public T CreateInstance<T>()
{
using (var scope = _service.CreateScope())
{
var service = scope.ServiceProvider.GetService<T>();
return service;
}
}
Однако, это дает мне следующую ошибку: The operation cannot be completed because the DbContext has been disposed.
Инициализацияраспоряжаться до любого звонка.Я не могу найти, как правильно подключить этот механизм определения области действия.
Цель состоит в том, чтобы иметь зависимость от области действия для каждой функции.На данный момент это единственный способ обойти эту проблему.
public async Task SendEmail(
[QueueTrigger("%AzureStorage:Queue:SendEmail%")] int emailId,
ILogger logger
)
{
// Ugly workaround that I have to insert in all my functions.
using (var scope = serviceProvider.CreateScope())
using (var myService = scope.ServiceProvider.GetService<IMyService>())
{
await myService.SendEmailAsync(emailId);
}
}