У меня есть служба, которая асинхронно читает некоторое содержимое из файла с помощью метода InitAsync
public class MyService : IService {
private readonly IDependency injectedDependency;
public MyService(IDependency injectedDependency) {
this.injectedDependency = injectedDependency;
}
public async Task InitAsync() {
// async loading from file.
}
}
Теперь этот сервис внедрен в мой контроллер.
public class MyController : Controller {
private readonly IService service;
public MyController(IService service) {
this.service = service;
}
}
Теперь я хочу одноэлементный экземпляр MyService. И я хочу вызвать InitAsync при запуске.
public class Startup {
public void ConfigureServices(IServiceCollection services) {
......
services.AddSingleton<IService, MyService>();
var serviceProvider = services.BuildServiceProvider();
// perform async init.
serviceProvider.GetRequiredService<IService>().InitAsync();
}
}
То, что происходит во время запуска, создается экземпляр MyService и на нем вызывается InitAsync()
. Затем, когда я вызвал класс контроллера, создается другой экземпляр MyService, который затем повторно используется для последующих вызовов.
Что мне нужно, так это инициализировать только 1 экземпляр, который называется InitAsync () на нем при запуске, и чтобы он мог повторно использоваться контроллерами.