项目框架构建之2:主机程序的搭建

本文是“项目框架构建”系列之2,要编写一个项目框架,就好像一个操作系统似的,得有一些东西可以搭载项目结构,而.net core的主机框架正是可以实现这一目的的好帮手。

简单介绍一下主机程序,我们生产系统中往往需要构建控制台应用程序、Web应用程序、后台服务、Winform窗体应用程序等,为了应对各种应用所带来的挑战,我们就很需要微软的主机系统。

微软的主机系统是指.net core或者.net 5以上的应用程序主机,这个主机允许我们使用配置、日志、依赖注入等一些常见的功能,还可以编写中间件等很多丰富功能。更为重要的是它是一种框架体系,可以随时插件式的加入各种生产应用上的功能。


一个简单的主机示例如下:

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;class Program
{static void Main(string[] args){CreateHostBuilder(args).Build().Run();}static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureServices((hostContext, services) =>{// 在这里配置应用程序的服务services.AddHostedService<MyBackgroundService>();});
}// 示例后台服务
public class MyBackgroundService : BackgroundService
{private readonly ILogger<MyBackgroundService> _logger;public MyBackgroundService(ILogger<MyBackgroundService> logger){_logger = logger;}protected override async Task ExecuteAsync(CancellationToken stoppingToken){while (!stoppingToken.IsCancellationRequested){_logger.LogInformation("Background service is running.");await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);}}
}

当然这样的一个示例,并不能用于我们的项目框架结构,如何让一个主机系统应用到实际生产项目中呢?


这就是本文的主旨,搭建一个主机程序,我们需要做一些基础工作。

1.主机项目结构

我项目用Xejen做为命名空间,由此,我们就可以构建Xejen和Xejen.Hosting两个项目

Xejen做为框架的基础项目,主要放一些基础性的通用类、以及公共扩展类

Xejen.Hosting则作为主机框架项目

2.项目环境

我们将使用vs2022来编写项目,这是为了与时俱进,并使用最新的.net 8.0

3.日志项目

搭建主机项目框架,日志项目是少不了的。

所以我们要创建Xejen.Logger以及Xejen.Logger.NLog项目。

用Logger是为了使用Microsoft的日志,使用NLog是为了将热门的日志插件集成到框架项目中。

4.兼容旧版本

我们在与时俱进,使用最新技术的同时,也不要忘了向下兼容,我们最多只能兼容到.net framework4.7的版本,为什么呢?因为依赖注入至少要4.7起,我们不能失去依赖注入这项功能,所以,我们只能放弃4.7以前的版本支持。

5.引入Nuget服务器管理系统

由于我们做的是项目框架演练和交流,所以,既然是项目框架,那么Nuget服务器的搭建是少不了的。关于Nuget服务器的准备,放在下一篇先讲一下,这是一个容易的功能。

好的,今天,我们就只需要做这些就好了。

项目构建好后,如下图所示:

由于本文只适用高级程序员阅读,所以基础简单的就略过了。这些构建项目对于读者您来说,是再简单不过的了。

下面配置一段nuget打包的项目属性,您可以参考:

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFrameworks>netstandard2.1;net8.0;net7.0;net6.0;net5.0;net48;net472;net471;net47;</TargetFrameworks><ImplicitUsings>enable</ImplicitUsings><Nullable>disable</Nullable><RootNamespace /><GenerateDocumentationFile>True</GenerateDocumentationFile><GeneratePackageOnBuild>True</GeneratePackageOnBuild><Version>2024.1.3.1</Version><Authors>析锦团队</Authors><Company>广州市析锦服饰有限公司</Company><Copyright>广州市析锦服饰有限公司</Copyright><Description>项目框架基础,提供通用类以及公共的常用扩展方法</Description></PropertyGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"><TreatWarningsAsErrors>True</TreatWarningsAsErrors><WarningLevel>9999</WarningLevel></PropertyGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"><TreatWarningsAsErrors>True</TreatWarningsAsErrors><WarningLevel>9999</WarningLevel></PropertyGroup></Project>

这都是简单的东西,作为高级程序员的你,这是小儿科了。只提一点,为了向下兼容,项目提供支持netstandard2.1;net8.0;net7.0;net6.0;net5.0;net48;net472;net471;net47;这几个版本,最低.net framework4.7。

祝您用餐愉快。

1-3-5 $ 3-5-5-4 带着田螺回四堡 3-5-2-4,你相信这是微吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/594862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis复习笔记02(小滴课堂)

分布式缓存Redis6常见核心配置讲解 查看配置文件&#xff1a; 创建配置文件&#xff1a; 配置完我们去验证一下&#xff1a; 启动成功就没有问题了。 可以看到redis日志。 然后我们就可以连接我们的redis了&#xff1a; 设置了密码就需要密码登录了。 如果登录了错误的密码也无…

12月,全国各地电子签推广应用政策汇总

12月&#xff0c;国务院及各地政府办公厅、市监局、住建委等机关部门&#xff0c;持续推动电子印章、电子合同等功能在“政府采购、工程项目审批、企业开办等”领域深化应用&#xff0c;加快实现电子签章互信互认&#xff0c;不断简化办事流程&#xff0c;让越来越多高频常办事…

关于几何建模内核

几何建模内核是用于提供计算机辅助设计 (CAD) 软件中的 3D 建模功能的软件组件。它用于设计虚拟模型以为真实对象的仿真和制造提供支持。几何建模内核使用各种不同的几何表示形式来表示真实对象。这些模型包括使用三角形表面网格粗略估计对象的小平面模型&#xff0c;以及使用在…

边坡安全监测预警系统——高效率

安装边坡安全监测预警系统的原因是多方面的&#xff0c;涉及到社会效益、经济效益和环境效益。随着国家基础设施建设的快速发展&#xff0c;边坡安全监测预警系统的需求越来越迫切。 边坡安全监测预警系统对于保障人民生命财产安全具有重要意义。在山区、丘陵地带&#xff0c;边…

机器学习期末复习

机器学习 选择题名词解释&#xff1a;简答题计算题一、线性回归二、决策树三、贝叶斯 选择题 机器学习利用经验 &#xff0c;须对以下&#xff08;&#xff09;进行分析 A 天气 B 数据 C 生活 D 语言 归纳偏好值指机器学习算法在学习的过程中&#xff0c;对以下&#xff08;&a…

DHTMLX Spreadsheet v5.1.1 Crack

DHTMLX Spreadsheet 5.1 具有新主题、简化的数字格式本地化、与框架的实时集成演示等 推出 DHTMLX Spreadsheet v5.1。新版本提供了一组有用的功能&#xff0c;这对开发人员和最终用户都有吸引力。 首先&#xff0c;新的电子表格版本提供了 4 个内置主题&#xff0c;可以根据您…

STM32CubeMX RS485接口使用

一、基本知识 TTL&#xff08;Transistor-Transistor Logic&#xff09;&#xff1a; 电平范围&#xff1a; 逻辑1对应于2.4V–5V&#xff0c;逻辑0对应于0V–0.5V。通信特点&#xff1a; 全双工。特点&#xff1a; 常见于单片机和微控制器的IO电平&#xff0c;USB转TTL模块通常…

【Qt第三方库】QXlsx库——对 Excel 文件进行相关操作

0 前言 关键词&#xff1a;Qt&#xff1b;Excel&#xff1b;QXlsx&#xff1b;QInt 简介&#xff1a; QXlsx 是第三方开源的库&#xff0c;能够对 Excel 文件进行相关操作&#xff08;读写等&#xff09; 地址&#xff1a; QXlsx官网 QXlsx的Github主页 1 快速上手 对于第一次…

设计模式-流接口模式

设计模式专栏 模式介绍模式特点应用场景流接口模式和工厂模式的区别代码示例Java实现流接口模式Python实现流接口模式 流接口模式在spring中的应用 模式介绍 流接口模式是一种面向对象的编程模式&#xff0c;它可以使代码更具可读性和流畅性。流接口模式的核心思想是采用链式调…

[Unity]实时阴影技术方案总结

一&#xff0c;Planar Shadow 原理就是将模型压扁之后绘制在需要接受阴影的物体上&#xff0c;这种方式十分高效&#xff0c;消耗很低。具体实现过程参考Unity Shader - Planar Shadow - 平面阴影。具按照自己的理解&#xff0c;其实就是根据光照方向计算片元在接受阴影的平面…

odoo 客制化审批流

以BPM、OA为代表的应用平台&#xff0c;低代码处理为前提的审批流功能定制化 功能介绍&#xff1a; 业务对象&#xff1a;针对侵入式注册BPM业务场景&#xff1a;设置审批场景&#xff1a;如&#xff1a;请假大于三天的场景、金额大于1000的场景节点条件&#xff1a; 当符合某…

Spring Cloud Gateway整合Sentinel

日升时奋斗&#xff0c;日落时自省 目录 1、实现整合 1.1、添加框架依赖 1.2、设置配置文件 1.3、设置限流和熔断规则 1.3.1、限流配置 Route ID限流配置 API限流配置 1.3.2、熔断配置 2、实现原理 先前Sentinel针对是业务微服务&#xff0c;没有整合Sentinel到Spring…

前端发开的性能优化 请求级:请求前(资源预加载和预读取)

预加载 预加载&#xff1a;是优化网页性能的重要技术&#xff0c;其目的就是在页面加载过程中先提前请求和获取相关的资源信息&#xff0c;减少用户的等待时间&#xff0c;提高用户的体验性。预加载的操作可以尝试去解决一些类似于减少首次内容渲染的时间&#xff0c;提升关键资…

python统计分析——直方图(sns.histplot)

使用seanborn.histplot()函数绘制直方图 from matplotlib.pyplot as plt import seaborn as snsdata_setnp.array([2,3,3,4,4,4,4,5,5,6]) plt.hist(fish_data) &#xff08;1&#xff09;dataNone, 表示数据源。 &#xff08;2&#xff09;xNone, 表示直方图的分布垂直与x轴…

程序媛的mac修炼手册-- 终端shell的驾驭 zsh vs bash

进入终端(Terminal)为新下载的应用配置环境&#xff0c;是Mac生产力up up的关键一步&#xff0c;更是编程小白装大神的第一步。Fake it till you make it , 硅谷大神标准路径&#xff5e; shell的基本原理 为应用配置环境&#xff0c;相当于在应用和操作系统间架桥。由此&…

Flink Watermark和时间语义

Flink 中的时间语义 时间语义&#xff1a; EventTime&#xff1a;事件创建时间&#xff1b;Ingestion Time&#xff1a;数据进入Flink的时间&#xff1b;Processing Time&#xff1a;执行操作算子的本地系统时间&#xff0c;与机器无关。不同的时间语义有不同的应用场合&#x…

数据分析基础之《numpy(6)—IO操作与数据处理》

了解即可&#xff0c;用panads 一、numpy读取 1、问题 大多数数据并不是我们自己构造的&#xff0c;而是存在文件当中&#xff0c;需要我们用工具获取 但是numpy其实并不适合用来读取和处理数据&#xff0c;因此我们这里了解相关API&#xff0c;以及numpy不方便的地方即可 2…

【JavaFX】JavaFX11开发踩坑记录

文章目录 技术栈踩坑记录 技术栈 JavaFX 11MavenJDK 11 踩坑记录 这些坑对于初学者很容易踩&#xff0c;JavaFX经常会报错空指针异常遇到其中一个问题可能就会消耗好几天的时间。 JavaFX 采用的是MVC架构设计&#xff0c;页面设计使用 fxml文件&#xff1b;业务逻辑采用Con…

【实用工具】FFmpeg常用的命令

前言 FFmpeg是一个强大的多媒体处理工具&#xff0c;可以用于处理音频、视频和图像。 命令格式 ffmpeg {1} {2} -i {3} {4} {5} 上面命令中&#xff0c;五个部分的参数依次如下。 1.全局参数 2.输入文件参数 3.输入文件 4.输出文件参数 5.输出文件 常见命令行参数 -c&…

漏洞复现-天融信TOPSEC static_convert 远程命令执行漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…