У меня есть следующий код:
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.Configure<MyConfig>(Configuration.GetSection("MySection"));
services.AddSingleton<IMyClass>(sp => new MyClass(sp.GetService<IOptions<MyConfig>>()));
}
Это регистрирует синглтон для MyClass
, и теперь я могу заставить мои контроллеры принимать аргумент конструктора типа IMyClass
.Это работает как задумано.
MyClass
запускается первым, только когда контроллеру требуется IMyClass
.Тем не менее, я хотел бы, чтобы MyClass
был создан до того, как кто-нибудь когда-либо попросит об этом (так как он выполняет некоторую работу в своем конструкторе, которая занимает немного времени).
Я мог бы сделать что-то вроде:
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.Configure<MyConfig>(configuration.GetSection("MySection"));
var myinstance = new MyClass(/*...*/); // How do I get MyConfig in here?
services.AddSingleton<IMyClass>(myinstance);
}
... но тогда я не могу добраться до конфигурации, поскольку у меня нет ссылки на IServiceProvider
(переменная sp
в первом примере кода).Как мне добраться до sericeprovider или что мне нужно сделать, чтобы экземпляр был инициализирован как можно скорее?