参考文档 https://www.cnblogs.com/artech/p/inside-asp-net-core-3.html
学习了解下netcore的"主机"
"主机"是一个程序环境,可以在其上运行一些功能.
例如,一台计算机,在上面运行一个游戏软件.可以叫计算机为"主机".
那为什么要做这样一个"主机"呢?
游戏软件的运行需要一些软硬件资源还要设置和读取环境配置,"主机"就能打包这些软硬件资源,并且提供这些资源的信息.
这个就是计算机主机的概念,体现在软件开发模式上.
练习示例
环境: vs2019 / net5
做一个定时显示时间的程序,放在这个"主机"里运行.
1. 新建一个netcore的控制台应用程序,添加 Microsoft.Extensions.Hosting 的nuget包.
2.报时程序类(干活的程序)
public class AlertTime { public readonly System.Timers.Timer time = new(); public AlertTime() { time.Elapsed += Time_Elapsed; time.Interval = 1000; } private void Time_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
// 在控制台打印时间 Console.WriteLine(DateTime.Now.ToString()); } }
3.报时程序控制类
public class AlertTimeCtrl : IHostedService { private AlertTime _work = new(); public Task StartAsync(CancellationToken cancellationToken) { _work.time.Start(); return Task.CompletedTask; } public Task StopAsync(CancellationToken cancellationToken) { _work.time.Stop(); return Task.CompletedTask; } }
4.建立主机
public static void Main(string[] args) { // host ConfigServices 主机服务配置 static void servicesCfg(HostBuilderContext hostContent, IServiceCollection services) { // 添加服务 services.AddHostedService<AlertTimeCtrl>(); } // 实例化主机(使用默认的主机),添加服务 IHostBuilder hostbuild = Host.CreateDefaultBuilder(); hostbuild.ConfigureServices(servicesCfg); // 生成并开启主机 IHost host = hostbuild.Build(); host.Run(); }
程序理解
AlertTime就是工作程序,和"主机"的关系.就如同游戏软件和运行这游戏的计算机.
AlertTimeCtrl类是为了实现 IHostedService 接口,这个接口的功能就是两个方法,开始(StartAsync)和停止(StopAsync).
对于要在"主机"里运行的程序,规定要有这两个方法.也就是要实现 IHostedService 接口,这个类具体实现就是,在开始方法里打开定时器,结束方法里关闭定时器.
有了程序,也设好了在"主机"里运行的条件,最后来建立主机:
用这个方法建立"主机",没有配置
IHostBuilder hostbuild = new HostBuilder();
可以用默认模板建立,比较省事,Host这个静态类,提供这个"主机"模板
IHostBuilder hostbuild = Host.CreateDefaultBuilder();
把工作程序加入到"主机"里
hostbuild.ConfigureServices(servicesCfg);
servicesCfg参数是一个方法,方法定义是 void(HostBuilderContext hostContent, IServiceCollection services)
hostContent参数是"主机"上下文对象,services是"主机"里所有的服务程序集合.
调用services的add方法,把报时程序加到"主机"里
services.AddHostedService<AlertTimeCtrl>();
Build: 初始化"主机"配置,生成"主机"对象
IHost host = hostbuild.Build();
Run: 运行"主机"
host.Run();
感受
这个练习主要是学习编程模式了,程序代码只有很少几行,是编程模式的表示形式.如果不理解框架程序的设计思路,基本上用不好,用不习惯.
"主机"承载服务,程序配置用的是依赖注入模式,如果不熟悉这个,会感觉程序配置比较费解,需要写个方法做配置参数,通过这个方法的参数进行配置.
参考文档比较详细的讲解了依赖注入还有IOC这些.
经常感觉用框架程序麻烦,不好用,不如直接用库.主要是没了解它的设计思路,感觉使用复杂,没用的东西多.但学习程序框架的设计思路很有用,
一来可以比较容易的使用这个程序框架,再就是可以使用这思路定制符合自己要求的程序框架.