zoukankan      html  css  js  c++  java
  • 【三】、.net core 3.1 windows服务依赖注入

    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、运行结果如下:

     示例代码地址:https://download.csdn.net/download/jiancaixing/20629212

  • 相关阅读:
    Tarjan算法
    10JS数组
    9JS循环
    8.JS流程控制
    7.JS运算符
    6.JS方法
    5.JS变量的各种问题
    java封装遇到的问题
    js报Uncaught SyntaxError: Unexpected token <错误 解决方法:
    使用layui出现Uncaught ReferenceError: layui is not defined问题解决:
  • 原文地址:https://www.cnblogs.com/wjx-blog/p/15075763.html
Copyright © 2011-2022 走看看