[英]Start start scoped hosted service instance in .net core console application
[英]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")));
控制台应用程序工作正常,但我想知道如何处理连接的生命周期。 连接是否以及何时关闭或处置? 或者这与瞬态实例的行为相同,我应该自己处理它?
当您从IServiceCollection
( BuildServiceProvider
方法)构建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.