项目框架构建之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,你相信这是微吗?

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值