• 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这些.

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

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

  • 相关阅读:
    codevs 1213 解的个数(我去年打了个表
    176. [USACO Feb07] 奶牛聚会
    codevs 1515 跳
    codevs 1994 排队 排列组合+高精度
    poj 1811 Pallor Rho +Miller Rabin
    Miller_Rabin codevs 1702 素数判定2
    Lucas
    cos改ip
    用户名 不在 sudoers文件中,此事将被报告
    continue break
  • 原文地址:https://www.cnblogs.com/mirrortom/p/14708641.html
Copyright © 2020-2023  润新知