Nic*_*rth 5 c# asp.net asp.net-core-mvc asp.net-core
在后台服务中获取服务实例时,我观察到一些特殊行为。
我有一个服务,其中一个属性具有默认值。对于此服务的前两个实例,它拥有预期的默认值。在第三次实例化时,它始终具有未定义的值。
public class MyWorker : BackgroundService
{
private readonly IServiceScopeFactory _scopeFactory;
public MyWorker(IServiceScopeFactory scopeFactory)
{
_scopeFactory = scopeFactory;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
for (int i = 0; i < 3; i++)
{
using (var scope = _scopeFactory.CreateScope())
{
var myService = scope.ServiceProvider.GetRequiredService<MyService>();
...
}
await Task.Delay(100, stoppingToken);
}
}
}
Run Code Online (Sandbox Code Playgroud)
public class MyService
{
private readonly MyEnum _myEnum;
public MyService(MyEnum myEnum = MyEnum.ValueA)
{
_myEnum = myEnum;
Console.WriteLine("Value: {0}", myEnum);
}
}
Run Code Online (Sandbox Code Playgroud)
public class Startup {
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<MyService>();
services.AddHostedService<MyWorker>();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Value: ValueA
Value: ValueA
Value: -1140239512
Run Code Online (Sandbox Code Playgroud)
如果我MyService按如下方式添加到容器中,并显式实例化MyService,问题就会消失:
public class Startup {
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<MyService>(new MyService());
services.AddHostedService<MyWorker>();
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道是什么导致了这种行为?
这似乎是 ASP.NET Core 3.x 中存在的错误。
该问题在 .NET 5.x 中已得到解决。
请参阅此错误报告以获取更多信息https://github.com/dotnet/extensions/issues/2431
对于那些感兴趣的人,描述为什么它在第三次调用时始终中断:https://github.com/dotnet/runtime/issues/42037#issuecomment-691221525
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |