欢迎光临散文网 会员登陆 & 注册

dotnetcore主机学习

2022-07-31 13:14 作者:限量版范儿  | 我要投稿

学习了解下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这些.

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

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

参考文档:https://www.dianjilingqu.com/459467.html

dotnetcore主机学习的评论 (共 条)

分享到微博请遵守国家法律