为什么当他们注册为单例时,我会得到 2 个实例



我有一个类 A 类

public class ClassA : IRefreshable
{
}

并在初创公司中注册

services.AddSingleton<ClassA>();

我也将我的服务注册为单例

services.AddSingleton(services);

我还创建了一个名为 RefreshController 的控制器,它在构造函数中接收 IServiceCollection。

  public RefreshController(IServiceCollection sc)
  {
  }

现在在刷新控制器中,我正在使用服务集合来获取注册为单例的所有类型,以实现 IRefreshable,因此在调用刷新端点时,我正在循环访问它们并使用服务提供程序获取实例

       this.typesToRefresh = sc.Where(s => s.Lifetime == ServiceLifetime.Singleton &&
       s.ServiceType.FullName.ToLower().StartsWith("MyNamespace")
       && typeof(IRefreshable).IsAssignableFrom(s.ImplementationType)).ToList();

            typesToRefresh.ForEach(t =>
            {
                IRefreshable rf = (IRefreshable)sProvider.GetService(t.ServiceType);
                rf.Refresh();
            });

我的问题是我为同一个注册服务获得了 2 个实例。任何想法??

好的!事实证明,每个服务提供商都是独立的。我从代码中删除了所有 .buildServiceProvider,并且正在从 Httpcontext.RequestServices 和 IApplicationBuilder.ApplicationServices 中的 Startup.Configure 方法访问控制器中的框架 sp。

感谢您的帮助。

相关内容

最新更新