如何在 类 的深层层次结构中使用单例对象

How to use singleton object in a deep hierarchy of classes

您好,我遇到了以下问题。

我有一个对象只构造了 一次 更具体地说,在 Startup class 的 ConfigureServices 方法中。

此对象必须在层次结构的深处传递,useful.I 不想在对象之间传递对此对象的引用。

如果我将它添加到服务集合中,我将无法解决任何问题,因为我在另一个服务的深处使用它,其组件需要它。

例子

 public void ConfigureServices(IServiceCollection services)
    {
           var dependencyObject=await Database(....get me something...);
           var singleton=new Singleton(dependencyObject);

           var userService=new SomeService(complexObject); //transient !
           services.AddTransient(userService);
    }

    public class SomeService
    {
       public SomeComponentOfService component{get;set;}
       SomeService(Singleton singleton)
       {
         component=new  SomeComponentOfService(singleton);
       }
    }

public class SomeComponentOfService
{
   public Singleton singleton;
   public SomeComponentOfService(Singleton single)
   {
      ......on and on....
    }
}

这个列表会随着 Singleton 对象而不断增加....

现在您可以看到我的 Transient 服务需要一个依赖于另一个服务(数据库)的单例对象。因此必须在层次结构的高层创建单例。

问题是我的 SomeService 必须将这个 singleton 传递给其他对象,并且有一个巨大的层次结构。

我能否以某种方式创建我的 Singleton 链上游并从我的服务集合中获取它(无论我需要它)?

在要使用 Singleton 对象的 class 中创建一个静态变量。自己新建 Singleton 或让依赖项注入框架执行此操作。然后将其添加到 class.

中的静态变量

一些依赖注入框架也有参数注入。如果它是你内心深处的来源,你可以让依赖注入框架通过参数注入添加 class.