假设我有一个Singleton,它有一个作用域依赖项(并且永远由singleton保存)。
然后创建一个作用域,并从容器中获取Singleton和作用域实例。我希望这个作用域只在一个范围内实例化一次。
请查看一个简化的代码示例:
namespace TrivialConsole
{
using Microsoft.Extensions.DependencyInjection;
using System;
class Program
{
static void Main(string[] args)
{
var services = new ServiceCollection();
services.AddScoped<Scoped>();
services.AddSingleton<Singleton>();
var provider = services.BuildServiceProvider();
using (var rootScope = provider.CreateScope())
{
var scopeProvider = rootScope.ServiceProvider;
var singleton = scopeProvider.GetRequiredService<Singleton>();
var scoped = scopeProvider.GetRequiredService<Scoped>();
}
}
}
public class Singleton
{
private static int instances = 0;
private readonly Scoped scoped;
public Singleton(Scoped scoped)
{
instances += 1;
this.scoped = scoped;
Console.WriteLine($"singleton {instances}");
}
}
public class Scoped
{
private static int instances = 0;
public Scoped()
{
instances += 1;
Console.WriteLine($"scoped {instances}");
}
}
}在以下方面的成果:
scoped 1
singleton 1
scoped 2预期结果->
scoped 1
singleton 1发布于 2021-07-26 14:01:50
根据文档,不应该将作用域类型注入到此框架中的单个对象中。
不要从单例解析作用域服务,并且要小心不间接地解析,例如通过临时服务。它可能导致服务在处理后续请求时出现不正确的状态。好的是:
https://stackoverflow.com/questions/68529583
复制相似问题