首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的作用域依赖在单个范围内实例化两次?

为什么我的作用域依赖在单个范围内实例化两次?
EN

Stack Overflow用户
提问于 2021-07-26 12:11:04
回答 1查看 137关注 0票数 1

假设我有一个Singleton,它有一个作用域依赖项(并且永远由singleton保存)。

然后创建一个作用域,并从容器中获取Singleton和作用域实例。我希望这个作用域只在一个范围内实例化一次。

请查看一个简化的代码示例:

代码语言:javascript
复制
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}");
        }
    }
}

在以下方面的成果:

代码语言:javascript
复制
scoped 1
singleton 1
scoped 2

预期结果->

代码语言:javascript
复制
scoped 1
singleton 1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-26 14:01:50

根据文档,不应该将作用域类型注入到此框架中的单个对象中。

不要从单例解析作用域服务,并且要小心不间接地解析,例如通过临时服务。它可能导致服务在处理后续请求时出现不正确的状态。好的是:

  • 从作用域或临时服务解析单例服务。
  • 从另一个作用域或临时服务解析作用域服务。

参考文献

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68529583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档