OrchestrationTrigger 无法访问已处置的对象

OrchestrationTrigger Cannot access a disposed object

我有一个连接到外部 API 的功能,因为我不能在短时间内收到太多请求,所以我尝试使用 OrchestrationTrigger。一切似乎都有效,直到最后一部分我更新数据库并收到以下错误:

Exception: DurableTask.Core.Exceptions.TaskFailureException: Activity function 'MyTrigger' failed: Cannot access a disposed object. A common cause of this error is disposing a context that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling Dispose() on the context, or wrapping the context in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances.
Object name: 'BaseContext'.

只有在使用 DurableTask 时才会发生这种情况。这是我的代码:

Setup.cs

builder.Services.AddLogging(options => options.AddConsole());

builder.Services.AddDbContext<BaseContext>(options => options.UseSqlServer(connection));

builder.Services.AddSingleton((container) =>
    {
        var context = container.GetService<BaseContext>();
        var stack = container.GetRequiredService<ILogger<StackService>>();
        return new StackService(stack, new StackConfiguration(context), null);
    });

MyTrigger.cs

public class MyTrigger : BaseTrigger
{
    private readonly Import import;

    public MyTrigger(BaseContext db, Library.Services.StackService stack) : base(db, "MyTrigger")
    {
        import = new Import(db, stack);
    }

    [FunctionName("MyTimeTrigger")]
    public void RunTimerTrigger([TimerTrigger("0 0 2 * * *")] TimerInfo myTimer)
    {
        if (myTimer.IsPastDue)
        {
            return;
        }

        import.Run();
    }

    [FunctionName("MyHTTPTrigger")]
    public async Task<IActionResult> RunHttpTrigger([DurableClient] IDurableOrchestrationClient context, [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req)
    {
        ReqData data = await GetRequestBody<ReqData>(req);
        data.trigger = Triggers.HTTP;

        string instanceId = await context.StartNewAsync("MyOrchestrationTrigger", data);

        context.CreateCheckStatusResponse(req, instanceId);

        return HttpEmptyResponse();
    }

    [FunctionName("MyOrchestrationTrigger")]
    public async Task<bool> RunOrchestrationTrigger([OrchestrationTrigger] IDurableOrchestrationContext context)
    {
        var data = context.GetInput<ReqData>();
        return await context.CallActivityAsync<bool>("MyTrigger", data);
    }


    [FunctionName("MyTrigger")]
    public bool Run([ActivityTrigger] IDurableActivityContext inputs)
    {
        ReqData data = inputs.GetInput<ReqData>();
        return import.Run(data);
    }
}

我可能在这里遗漏了什么?

builder.Services.AddSingleton 更改为 builder.Services.AddTransient 成功了。

https://karthiktechblog.com/c-sharp/how-to-resolve-cannot-access-a-disposed-object-in-dotnet-core-when-injecting-dbcontext