gpt4 book ai didi

.net - 如何在 .NET Core 中使用默认依赖注入(inject)从父级创建子范围?

转载 作者:行者123 更新时间:2023-12-03 19:59:38 25 4
gpt4 key购买 nike

我正在构建一个控制台 .NET Core 应用程序。它定期运行一个可以完成某些工作的方法。如何使 ServiceProvider 的行为方式与它在 ASP.NET Core 应用程序中的行为方式相同。我希望它在方法开始执行时解析范围服务,并在方法结束时处理解析的服务。

// pseudocode

globalProvider.AddScoped<ExampleService>();

// ...

using (var scopedProvider = globalProvider.CreateChildScope())
{
var exampleService = scopedProvider.Resolve<ExampleService>();
}

最佳答案

使用IServiceProvider.CreateScope()创建本地范围的方法:

var services = new ServiceCollection();
services.AddScoped<ExampleService>();
var globalProvider = services.BuildServiceProvider();

using (var scope = globalProvider.CreateScope())
{
var localScoped = scope.ServiceProvider.GetService<ExampleService>();

var globalScoped = globalProvider.GetService<ExampleService>();
}

它可以很容易地测试:
using (var scope = globalProvider.CreateScope())
{
var localScopedV1 = scope.ServiceProvider.GetService<ExampleService>();
var localScopedV2 = scope.ServiceProvider.GetService<ExampleService>();
Assert.Equal(localScopedV1, localScopedV2);

var globalScoped = globalProvider.GetService<ExampleService>();
Assert.NotEqual(localScopedV1, globalScoped);
Assert.NotEqual(localScopedV2, globalScoped);
}

文档: Service Lifetimes and Registration Options .

引用 Microsoft.Extensions.DependencyInjection
或只是 Microsoft.AspNetCore.All
包以使用上面的代码。

关于.net - 如何在 .NET Core 中使用默认依赖注入(inject)从父级创建子范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43722463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com