在应用程序启动期间,我使用CarService
类来检索数据。我只想这样做一次,结果List<Car>
从那一点起对应用中的所有消费者都可用(使用DI),换句话说,我不想每次在控制器或服务中注入ICarService
时调用CarService -> GetData,而是只调用一次。
public interface ICarService
{
Task<List<Car>> GetData();
}
public class CarService : ICarService
{
private readonly IHttpClientFactory _httpClientFactory;
public CarService(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
public async Task<List<Car>> GetData()
{
var client = _httpClientFactory.CreateClient();
var req = new HttpRequestMessage(HttpMethod.Get, "https://localhost:5011/cars");
var res = await client.SendAsync(req);
...
return data;
}
}
Program.cs
services.AddSingleton<ICarService, CarService>();
services.AddHostedService<GetDataService>();
public class GetDataService : IHostedService
{
public async Task StartAsync(CancellationToken cancellationToken)
{
var carService = _serviceScopeFactory.CreateScope().ServiceProvider
.GetRequiredService<ICarService>();
var data = carService.GetData();
...
}
}
1条答案
按热度按时间cbjzeqam1#
如何像这样改变你的CarService: