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

时间:2019-03-20 23:35:11

标签: oop asp.net-core dependency-injection singleton

你好,我有以下问题。

/Applications/apache-maven-3.6.0/bin类的ConfigureServices方法中,我有一个对象只能更具体地构造一次。

必须将该对象传递到层次结构的深处才有用。我不想在一个对象之间传递对该对象的引用。

如果我将其添加到服务集合中,则由于我在其他服务内部使用了该组件,因此它什么也解决不了。

示例

Startup

列表随 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链的上层,并从我的服务集合中获取它(无论何时需要)吗?

1 个答案:

答案 0 :(得分:1)

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

某些依赖项注入框架也具有参数注入。如果依赖注入框架是深入类的源头,则可以允许通过参数注入添加依赖注入框架。