1、建立一个接口
public interface IServicesDoParse { void Do(); }
2、做一个接口的实现
public class ServicesDoParse : IServicesDoParse { private readonly ILogger<IServicesDoParse> _logger; private readonly MQConfig _mqConfig; public ServicesDoParse(ILogger<ServicesDoParse> logger, IOptions<MQConfig> settings) { _logger = logger; _mqConfig = settings.Value; } public void Do() { _logger.LogInformation("ServicesDoParse运行成功,在注入的服务里读取IP:", _mqConfig.IP); } }
3、在Program的CreateHostBuilder里添加
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureServices((hostContext, services) => { services.AddScoped<IServicesDoParse, ServicesDoParse>(); services.AddHostedService<Worker>(); services.Configure<MQConfig>(hostContext.Configuration.GetSection(key: "MQ")); }) .UseSerilog();
4、实际使用
public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; private readonly MQConfig _mqConfig; private readonly IServiceProvider _serviceProvider; public Worker(ILogger<Worker> logger, IOptions<MQConfig> settings, IServiceProvider serviceProvider) { _logger = logger; _mqConfig = settings.Value; _serviceProvider = serviceProvider; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Worker running at: {time}" + "IP:{1},Port:{2}", DateTimeOffset.Now, _mqConfig.IP, _mqConfig.Port); using (var scope = _serviceProvider.CreateScope()) { var service = scope.ServiceProvider.GetRequiredService<IServicesDoParse>(); service.Do(); } await Task.Delay(1000, stoppingToken); } } }
5、运行结果如下: