我有一个服务,该服务在名为InitAsync
的方法中异步地从文件读取一些内容。
我有一个服务,该服务在名为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(),并使控制器也可以重复使用它。