【发布时间】:2019-05-10 12:02:26
【问题描述】:
我有一个服务,它以一种名为 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() 并让它也被控制器重用。
【问题讨论】:
标签: c# asp.net-core dependency-injection