(精华)2020年9月17日 ASP.NET Core Host主机服务详解
发布日期:2021-06-29 15:12:33
浏览次数:3
分类:技术文章
本文共 10681 字,大约阅读时间需要 35 分钟。
1.基本的使用
public class Sample01{ public class SystemClock : IHostedService { private Timer _timer; public Task StartAsync(CancellationToken cancellationToken) { _timer = new Timer(state => { Console.WriteLine($"Current Time:{DateTime.Now.ToLongTimeString()}"); }, null,0, 1000); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _timer?.Dispose(); return Task.CompletedTask; } } public static void Start() { var host = new HostBuilder() .ConfigureServices(collection => collection .AddSingleton()) .Build(); host.Run(); }}
2.依赖注入服务
public class Sample02{ ////// 温度 /// public interface ITemperatureCollector { int Get(); } ////// 湿度 /// public interface IHumidityCollector { int Get(); } ////// 空气质量 /// public interface IAirQualityCollector { int Get(); } public class Collector: ITemperatureCollector, IHumidityCollector, IAirQualityCollector { int ITemperatureCollector.Get() { var random = new Random(); return random.Next(0, 100); } int IHumidityCollector.Get() { var random = new Random(); return random.Next(0, 100); } int IAirQualityCollector.Get() { var random = new Random(); return random.Next(0, 100); } } public class AirEnvironmentService : IHostedService { private readonly ITemperatureCollector _temperatureCollector; private readonly IHumidityCollector _humidityCollector; private readonly IAirQualityCollector _airQualityCollector; private Timer _timer; public AirEnvironmentService( ITemperatureCollector temperatureCollector, IHumidityCollector humidityCollector, IAirQualityCollector airQualityCollector ) { _temperatureCollector = temperatureCollector; _humidityCollector = humidityCollector; _airQualityCollector = airQualityCollector; } public Task StartAsync(CancellationToken cancellationToken) { _timer = new Timer(state => { Console.WriteLine($"温度:{_temperatureCollector.Get(), -10}" + $"湿度:{_humidityCollector.Get(), -10}" + $"空气质量:{_airQualityCollector.Get(), -10}" + $"时间:{DateTime.Now.ToLongTimeString()}"); }, null,0, 1000); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _timer?.Dispose(); return Task.CompletedTask; } } public static void Start() { var collector = new Collector(); var host = new HostBuilder() .ConfigureServices(collection => collection .AddSingleton(collector) .AddSingleton (collector) .AddSingleton (collector) .AddHostedService () ).Build(); host.Run(); }}
3.环境变量的读取
public class Sample03{ ////// 温度 /// public interface ITemperatureCollector { int Get(); } ////// 湿度 /// public interface IHumidityCollector { int Get(); } ////// 空气质量 /// public interface IAirQualityCollector { int Get(); } public class Collector: ITemperatureCollector, IHumidityCollector, IAirQualityCollector { int ITemperatureCollector.Get() { var random = new Random(); return random.Next(0, 100); } int IHumidityCollector.Get() { var random = new Random(); return random.Next(0, 100); } int IAirQualityCollector.Get() { var random = new Random(); return random.Next(0, 100); } } public class AirEnvironmentOptions { public long Interval { get; set; } } public class AirEnvironmentService : IHostedService { private readonly ITemperatureCollector _temperatureCollector; private readonly IHumidityCollector _humidityCollector; private readonly IAirQualityCollector _airQualityCollector; private readonly AirEnvironmentOptions _options; private Timer _timer; public AirEnvironmentService( ITemperatureCollector temperatureCollector, IHumidityCollector humidityCollector, IAirQualityCollector airQualityCollector, IOptionsoptions ) { _temperatureCollector = temperatureCollector; _humidityCollector = humidityCollector; _airQualityCollector = airQualityCollector; _options = options.Value; } public Task StartAsync(CancellationToken cancellationToken) { _timer = new Timer(state => { Console.WriteLine($"温度:{_temperatureCollector.Get(), -10}" + $"湿度:{_humidityCollector.Get(), -10}" + $"空气质量:{_airQualityCollector.Get(), -10}" + $"时间:{DateTime.Now.ToLongTimeString()}"); }, null,0, _options.Interval); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _timer?.Dispose(); return Task.CompletedTask; } } public static void Start(string[] args) { var collector = new Collector(); var host = new HostBuilder() .ConfigureHostConfiguration(builder => builder.AddCommandLine(args)) .ConfigureAppConfiguration((context, builder) => builder .AddJsonFile("appsettings.json", false) .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json",true) ) .ConfigureServices((context, collection) => collection .AddSingleton (collector) .AddSingleton (collector) .AddSingleton (collector) .AddHostedService () .AddOptions() .Configure ( context.Configuration.GetSection("AirEnvironment")) ).Build(); host.Run(); }}
4.使用日志记录服务
public class Sample04{ ////// 温度 /// public interface ITemperatureCollector { int Get(); } ////// 湿度 /// public interface IHumidityCollector { int Get(); } ////// 空气质量 /// public interface IAirQualityCollector { int Get(); } public class Collector: ITemperatureCollector, IHumidityCollector, IAirQualityCollector { int ITemperatureCollector.Get() { var random = new Random(); return random.Next(0, 100); } int IHumidityCollector.Get() { var random = new Random(); return random.Next(0, 100); } int IAirQualityCollector.Get() { var random = new Random(); return random.Next(0, 100); } } public class AirEnvironmentOptions { public long Interval { get; set; } } public class AirEnvironmentPublisher { private const string Template = "温度:{temperature, -10}" + "湿度:{humidity, -10}" + "空气质量:{airQuality, -10}" + "时间:{now}"; private readonly Action_logAction; private readonly ILogger _logger; public AirEnvironmentPublisher(ILogger logger) { _logger = logger; _logAction = LoggerMessage.Define (LogLevel.Information, 0, Template); } public void Publish(int temp, int humi, int airq) { _logAction(_logger, temp, humi, airq, DateTime.Now.ToLongTimeString(), null); } } public class AirEnvironmentService : IHostedService { private readonly ITemperatureCollector _temperatureCollector; private readonly IHumidityCollector _humidityCollector; private readonly IAirQualityCollector _airQualityCollector; private readonly AirEnvironmentPublisher _publisher; private readonly AirEnvironmentOptions _options; private Timer _timer; public AirEnvironmentService( ITemperatureCollector temperatureCollector, IHumidityCollector humidityCollector, IAirQualityCollector airQualityCollector, AirEnvironmentPublisher publisher, IOptions options ) { _temperatureCollector = temperatureCollector; _humidityCollector = humidityCollector; _airQualityCollector = airQualityCollector; _publisher = publisher; _options = options.Value; } public Task StartAsync(CancellationToken cancellationToken) { _timer = new Timer(state => { _publisher.Publish( _temperatureCollector.Get(), _humidityCollector.Get(), _airQualityCollector.Get()); }, null,0, _options.Interval); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _timer?.Dispose(); return Task.CompletedTask; } } public static void Start() { var collector = new Collector(); var host = new HostBuilder() .ConfigureAppConfiguration((context,builder) => builder.AddJsonFile("appsettings.json")) .ConfigureServices((context, collection) => collection .AddSingleton (collector) .AddSingleton (collector) .AddSingleton (collector) .AddSingleton () .AddHostedService () .AddOptions() .Configure ( context.Configuration.GetSection("AirEnvironment")) ) .ConfigureLogging((context, builder) => builder .AddConfiguration(context.Configuration.GetSection("Logging")) .AddConsole()) .Build(); host.Run(); }}
转载地址:https://codeboy.blog.csdn.net/article/details/108590821 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月15日 12时24分00秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
标准出现问题,人工智能正在走向错误的方向
2019-04-29
如何使用Python实现最低有效位隐写术?
2019-04-29
湮没在赞誉之中,科学史上鲜为人知的五大“败笔”
2019-04-29
别再对分类变量进行独热编码!你还有更好的选择
2019-04-29
如果不能用Python执行机器学习,那该用什么呢?
2019-04-29
不论何时,互联网从业者一直幸福着~
2019-04-29
mysql用户口令中含有特殊字符@的情况下,如何正确链接数据库
2019-04-29
SpringFox接口文档API DOC
2019-04-29
netty优化策略
2019-04-29
架构师知识体系全景图
2019-04-29
guava中EventBus(事件总线)源码分析与使用
2019-04-29
程序员成神之路文章目录
2019-04-29
SASS软件的成熟度模型总结
2019-04-29
一次搞定redis使用
2019-04-29
最全架构设计实践方法论: 微服务
2019-04-29
Linux下简单几步安装AI开发环境-ROS(超有意思)
2019-04-29
linux入门--磁盘管理之分区、格式化与挂载
2019-04-29
开发必备:HTTP 及 TLS
2019-04-29
如何设计自己的第一个加密交易机器人?
2019-04-29
TKDE 2020 | 综述:基于知识图谱的推荐系统
2019-04-29