每个函数调用的WebJobs 3.0依赖注入AddScoped

时间:2018-10-06 19:36:19

标签: dependency-injection azure-webjobs azure-webjobs-continuous

对于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 个答案:

没有答案