Здравствуйте, у меня есть следующая проблема.
У меня есть объект, который создается только один раз , более конкретно, в методе 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
, и есть гигантская иерархия.
Могу ли я как-то создать свой Singleton
высоко в цепи и получить его от моегонабор услуг (где мне это нужно)?