アプリケーションが停止しようとしているときに、データベースの最終的なアクションを実行する方法ASP.Netコア

私が思います:

私は、ASP.NETコア3.1アプリケーションに取り組んでいます。私は自分のアプリケーションを停止しようとしている間、データベースに関連するいくつかの最後のアクションを実行します。私は、データベースとASP.NETコアとの間に追加の層である私のスコープサービス内の関数を呼び出すようにしようとしていることができません。

Startup.cs

public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifetime)
{
    lifetime.ApplicationStopping.Register(() =>
    {
        app.ApplicationServices.GetService<MyService>().SynchronizeChanges();
    });
}

残念ながら私が得るCannot resolve scoped service 'MyApplication.Services.MyService' from root provider私はそうしようとしている中にエラーが。

イングバー:

Asp.Netコアはスコープのサービスを作成することができませんので、アプリは、閉じている余地はありません。範囲は、HTTPリクエスト中に作成されます。あなたはスコープなしでスコープのサービスを作成する必要がない場合は、スコープを手動で作成することができます。

public void Configure(IApplicationBuilder app, IHostApplicationLifetime lifetime)
{
    lifetime.ApplicationStopping.Register(() =>
    {
        using (var scope = app.ApplicationServices.CreateScope())
        {
            scope.ServiceProvider
              .GetRequiredService<MyService>().SynchronizeChanges();
        }
    });
}

また、あなたはおそらく無効にAsp.Netコアスコープ検証にシングルトンか試して、あなたのサービスを登録することができます(推奨されません)。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=369844&siteId=1