3

对于 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);
    }
}
4

0 回答 0