在Controller动作返回后,如何强制立即处理范围服务?

时间:2018-11-01 04:22:45

标签: c# asp.net-core dependency-injection

我的ASP.NET Core 2.1 Web应用程序通过将DbContext添加为范围服务来使用Entity Framework 6:

public void ConfigureServices( IServiceCollection services )
{
    String connectionString = this.Configuration.GetConnectionString("db");

    services.AddScoped<IMyDbContext,MyDbContext>( _ => new MyDbContext( connectionString ) );

    // ...
}

然后我的控制器可以直接使用它,并且ASP.NET Core确保在控制器操作完成后将处置IMyDbContext(实现IDisposable)... 最终

但是我注意到我的MyDbContext在动作返回后(或动作的Task对于异步动作完成了)并没有被立即处置,因为我遇到了一些错误,而我无意中返回了{{ 1}}对象直接指向输出格式化程序(这是一个JSON格式化程序,用于查询我仍然连接的Entity对象上的所有导航属性,从而导致非常昂贵的延迟加载发生),但是直到我继续前进时,我才注意到这一点去另一个任务。如果IQueryable在操作返回后立即被处理,那么导航属性将抛出MyDbContext(即快速失败),而我会早点解决它。

是否有一种方法可以使ASP.NET Core在控制器操作返回后而不是在请求完成时立即处置范围内的服务?

0 个答案:

没有答案