繁体   English   中英

如何在.NET Core Console应用程序中处理Scoped服务实例?

[英]How is a Scoped service instance handled in a .NET Core Console application?

我在我正在构建的Web应用程序中从ConfigureServices复制了这个,我试图远离Web,只使用控制台应用程序或服务:

serviceCollection.AddScoped<IDbConnection, SqlConnection>(c => new SqlConnection(App.Configuration.GetConnectionString("DefaultConnection")));

控制台应用程序工作正常,但我想知道如何处理连接的生命周期。 连接是否以及何时关闭或处置? 或者这与瞬态实例的行为相同,我应该自己处理它?

当您从IServiceCollectionBuildServiceProvider方法)构建IServiceProvider并使用此IServiceProvider实例来解析IDbConnection ,每次都会获得相同的IDbConnection实例。 Scope连接到IServiceProvider 要创建新的作用域,您需要从容器IServiceScopeFactory解析并使用它来创建作用域的IServiceProvider

using (var scope = scopeFactory.CreateScope())
{
   var scopedConnection = scope.ServiceProvider.GetRequiredService<IDbConnection>();      
}

处理范围时将处理连接。

在ASP Core中,中间件为您管理范围,创建新范围,然后使用附加到此范围的IServiceProvider来解析Controller和此Web请求中的所有内容。 在控制台应用程序中,您需要自己管理范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM