【问题标题】:ASP.NET Core service scope factory undefined behaviourASP.NET Core 服务范围工厂未定义行为
【发布时间】:2021-03-05 12:45:36
【问题描述】:

在后台服务中获取服务实例时,我观察到一些特殊行为。

我有一个服务,该服务是在其中一个属性具有默认值的情况下构建的。对于此服务的前两个实例,它拥有预期的默认值。在第三次实例化时,它始终具有未定义的值。

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);
        }
    }
}
public class MyService
{
    private readonly MyEnum _myEnum;

    public MyService(MyEnum myEnum = MyEnum.ValueA)
    {
        _myEnum = myEnum;
        Console.WriteLine("Value: {0}", myEnum);
    }
}
public class Startup {
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<MyService>();
        services.AddHostedService<MyWorker>();
    }
}

输出:

Value: ValueA
Value: ValueA
Value: -1140239512

如果我按如下方式将MyService 添加到容器中,并显式实例化MyService,问题就会消失:

public class Startup {
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<MyService>(new MyService());
        services.AddHostedService<MyWorker>();
    }
}

有人知道是什么原因导致了这种行为吗?

【问题讨论】:

  • 您使用的是哪个版本的 ASP Core?
  • 我们使用的是 ASP.NET Core 3.1.1

标签: c# asp.net asp.net-core asp.net-core-mvc


【解决方案1】:

这似乎是 ASP.NET Core 3.x 中存在的错误。

该问题已在 .NET 5.x 中得到解决。

请参阅此错误报告以获取更多信息https://github.com/dotnet/extensions/issues/2431

对于那些感兴趣的人,描述为什么它在第三次调用时总是中断:https://github.com/dotnet/runtime/issues/42037#issuecomment-691221525

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2018-08-28
    相关资源
    最近更新 更多