Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core Autofac-作用域和子作用域中的共享实例_Asp.net Core_Autofac_Asp.net Core 2.2 - Fatal编程技术网

Asp.net core Autofac-作用域和子作用域中的共享实例

Asp.net core Autofac-作用域和子作用域中的共享实例,asp.net-core,autofac,asp.net-core-2.2,Asp.net Core,Autofac,Asp.net Core 2.2,我有一个ASP.NET Core 2.2应用程序,我想为请求将服务配置为“单例”。只要不创建子作用域,就可以使用InstancePerLifetimeScope。有些进程在从请求范围创建的子范围中运行 在ASP.NET Core 2.2中使用InstancePerRequest不起作用(这基本上就是我需要的) 是否有人遇到这种情况并找到了解决方案 using(var scope1 = container.BeginLifetimeScope()) { var w1 = scope1.Re

我有一个ASP.NET Core 2.2应用程序,我想为请求将服务配置为“单例”。只要不创建子作用域,就可以使用InstancePerLifetimeScope。有些进程在从请求范围创建的子范围中运行

在ASP.NET Core 2.2中使用InstancePerRequest不起作用(这基本上就是我需要的)

是否有人遇到这种情况并找到了解决方案

using(var scope1 = container.BeginLifetimeScope())
{
    var w1 = scope1.Resolve<Worker>(); // should resolve worker 1
    using(scope2 = scope1.BeginLifetimeScope())
    {
        var w2 = scope2.Resolve<Worker>(); // should resolve same worker as w1  
    }
}

using(scope3 = container.BeginLifetimeScope())
{
    var w3 = scope3.Resolve<Worker>();  // should resolve another worker
}
使用(var scope1=container.BeginLifetimeScope())
{
var w1=scope1.Resolve();//应解析工作进程1
使用(scope2=scope1.BeginLifetimeScope())
{
var w2=scope2.Resolve();//应解析与w1相同的工作进程
}
}
使用(scope3=container.BeginLifetimeScope())
{
var w3=scope3.Resolve();//应解析另一个工作进程
}

看起来您可能希望将
工作者定义为
InstancePerMatchingLifetimeScope
,然后使用与您注册的
工作者
相同的ID标记外部范围

请参阅标记范围上的文档: