WebJobs 3.0 Внедрение зависимостей AddScoped для каждого вызова функции

В 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);
    }
}

0 ответов

Другие вопросы по тегам