zoukankan      html  css  js  c++  java
  • .Net Core 控制台 使用Topshelf 加入DI(服务注册)

    .Net Core 控制台 使用Topshelf 加入DI(服务注册)

    如果是控制台使用Topshelf请先按照相应包配置

    Nuget包

    1. Topshelf
    2. Microsoft.Extensions.DependencyInjection

    Code block

     //第一步 (注意:Server IServer 是我用来举例的命名,请修改成你自己的命名)
     class Program
    {
      public  async static Task Main(string[] args)
        {
            var services = new ServiceCollection();//声明DI对象
           services.AddSingleton<IServer, Server>();//使用单例注入.
            var serviceProvider = services.BuildServiceProvider();//构建服务容器
            var serviceProviders = serviceProvider.GetService<IServer>();//获取指定服务
               // 配置和运行宿主服务
                HostFactory.Run(x =>                                 
                {
    
                    x.Service<ICarPark>(s =>                        
                    {
    
                        // 指定服务类型
                        s.ConstructUsing(name =>
                        {
                            return serviceProvider.GetService<IServer>();
                        });
                        //3
    
                        // 当服务启动后执行什么
                        s.WhenStarted(tc => tc.Start());              
    
                        // 当服务停止后执行什么
                        s.WhenStopped(tc => tc.Stop());               
                    });
    
                    // 服务用本地系统账号来运行
                    x.RunAsLocalSystem();                            
    
                    // 服务描述信息
                    x.SetDescription("服务描述信息");        
                    // 服务显示名称
                    x.SetDisplayName("服务显示名称");                       
                    // 服务名称
                    x.SetServiceName("服务名称");                       
                });
    
        }
    }
    //第二步
     public interface IServer
    {
    
         void Stop();
    
         void Start();
      
        }
    }
      //第三步
      using System.Timers;
     public class Server:IServer
    {  
    public Server() {
           
            _timer = new Timer(3000) { AutoReset = true };
            _timer.Elapsed += (sender, eventArgs) => OrderWrite();
        }   
           public void OrderWrite()
        {
    
            Console.WriteLine("开始", DateTime.Now);
        }
    
       //声明一个时间函数让 当前这个函数不断被调用
        public  void Stop(){
             Console.log("服务开始");
         };
    
           public  void Stop(){
             Console.log("服务结束");
         };
    
      
        }
    }
    

    参考链接

    最后

    如果你喜欢信息技术,欢迎你加入我们 QQ群:301453550
    没有广告 没有培训 每天都会分享技术文章

  • 相关阅读:
    selenium1-安装
    jmeter9-图形监控
    InetAddress.getLocalHost().getHostAddress() 在macOS里面反应很慢
    自定义实现简易定时任务
    Redis性能监控
    Linux启动进程、线程数量查看及修改方式
    jmeter处理request和response
    centos安装netdata
    scp使用expect自动输入密码
    Linux系统下生成TPS,ResponseTime曲线图
  • 原文地址:https://www.cnblogs.com/cyCalf/p/14272412.html
Copyright © 2011-2022 走看看