项目框架构建之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,一经查实,立即删除!

相关文章

Shape-IoU:考虑边框形状与尺度的度量

Abstract https://arxiv.org/pdf/2312.17663.pdf 作为检测器定位分支的重要组成部分&#xff0c;边界框回归损失在目标检测任务中发挥着重要作用。现有的边界框回归方法通常考虑真实框&#xff08;GT box&#xff09;与预测框之间的几何关系&#xff0c;并使用边界框的相对位置…

安卓技术栈归纳

1、开发语言 kotlin java &#xff08;Harmony os&#xff09; 2、UI开发 xml jetpackCompose Material Design 3、四大组件 Activity Service Broadcast Receiver Content Provider 4、常用组件库Navigation Hilt ViewModel Android KTX LiveData WorkM…

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

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

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

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

关于几何建模内核

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

tp6数据库查询,模型中使用left join

OrgModel模型(用户所属组织机构表) <?php namespace app\model;use app\BaseModel; use think\Model;class OrgModel extends BaseModel {protected $name t_org;protected $pk org_id; }UserModel模型(用户表) <?php namespace app\model;use app\BaseModel; use …

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

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

第9课 回声抑制(AEC+AGC+ANS)的实现

在第8课中&#xff0c;我们将推流端与播放端合并实现了一对一音视频聊天功能&#xff0c;一切看起来还不错。但在实际使用时&#xff0c;会遇到一个烦心的问题&#xff1a;说话时会听到比较大的回声&#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;可以根据您…

数字IC后端设计实现之Innovus update_names和changeInstName的各种应用场景

今天吾爱IC社区小编给大家分享下数字IC后端设计实现innovus中关于update_names和changeInstName在PR中的具体使用方法。 update_names 1&#xff09;为了避免和verilog语法保留的一些关键词&#xff0c;比如input&#xff0c;output这些&#xff0c;是不允许存在叫这类名字的…

VCG 添加自定义属性

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 VCG Lib提供了一种简单的机制,用于将用户定义的类型“属性”与单纯形和网格相关联。特别要注意的是,“属性”和“组件”基本上都是绑定到简单Mesh结构的附属数据。简而言之,组件是静态定义的成员数据,而属性是运…

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…

uView-UI v2.x常见问题整理

为了更好的给大家提供 uView UI 的技术支持&#xff0c;uView UI 团队整理常见问题文档&#xff0c;大家可以阅读查找常见的问题解决办法。 uView 2.x 文档 https://www.uviewui.com uView 1.x 文档 https://v1.uviewui.com uView UI uni-app 主页 DCloud 插件市场 uVie…

机器视觉系统选型-案例分享

客户要求&#xff1a; 1、测量物体&#xff1a;圆直径&#xff1a;15mm 2、公差带&#xff1a;0.2mm 0.1mm 3、工作距离&#xff1a;50~500mm 4、静态还是动态拍摄 5、视野 测量精度&#xff1a; 1、0.10.20.02mm 公式&#xff1a;机械误差公差带系统精度 2、0.2/100.02mm 公式…