如何在 类 的深层层次结构中使用单例对象
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.
您好,我遇到了以下问题。
我有一个对象只构造了 一次 更具体地说,在 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.