为什么我将两个实例注册为单例时得到它们

时间:2019-01-29 10:02:03

标签: c# .net dependency-injection asp.net-core-2.2

我有一个ClassA类

public class ClassA : IRefreshable
{
}

它已在启动公司中注册

services.AddSingleton<ClassA>();

我也将我的服务注册为单身人士

services.AddSingleton(services);

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

  public RefreshController(IServiceCollection sc)
  {
  }

现在在刷新控制器中,我正在使用服务集合来获取已注册为实现IRefreshable的单例的所有类型,因此在调用Refresh端点时,我将遍历它们并使用服务提供者来获取实例

       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个实例。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

感谢您的帮助。