(精华)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, IOptions
options ) {
_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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(精华)2020年10月2日 微服务 日志中心
下一篇:(精华)2020年12月23日 .NET Core 多线程底层详解(信号量)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月15日 12时24分00秒