dotnetcore主机学习

参考文档 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这些.

经常感觉用框架程序麻烦,不好用,不如直接用库.主要是没了解它的设计思路,感觉使用复杂,没用的东西多.但学习程序框架的设计思路很有用,

一来可以比较容易的使用这个程序框架,再就是可以使用这思路定制符合自己要求的程序框架.

posted @ 2021-04-27 13:48  mirrorspace  阅读(98)  评论(0编辑  收藏  举报