翼度科技»论坛 编程开发 .net 查看内容

.NET7后端框架:一句话启动

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
前言

.NET6 开始,.NET Croe API 项目取消了 Startup.cs 文件,在 Program.cs 文件的 Main 函数中完成服务的注册和中间件管道的管理。但当我们项目引入更多包的时候,Program.cs 文件也会看起来很臃肿。
而且,我们不只会有一个后端项目,为了方便快速创建后端框架,我们可以将基础服务移植到单独项目中进行管理。
那么,就从 Program.cs 开始。
创建项目

先创建三个项目,一个 ASP.NET Core Web API 项目,两个 C#类库 项目。结构如下:


  • AMO.API 项目作为启动项目
  • AMO.Core 作为基础服务项目
  • AMO.Entities 作为实体项目
迁移

编辑 AMO.Core 项目文件,添加 Microsoft.AspNetCore.App 框架引用,否则无法引用WebApplicationBuilder类;将 AMO.API 项目中默认添加的 Swagger 包引用复制过来。同时修改输出路径为 ..\AMO.API\bin
  1. <Project Sdk="Microsoft.NET.Sdk">
  2.   <PropertyGroup>
  3.     <TargetFramework>net7.0</TargetFramework>
  4.     <ImplicitUsings>enable</ImplicitUsings>
  5.     <Nullable>enable</Nullable>
  6.     <BaseOutputPath>..\AMO.API\bin</BaseOutputPath>
  7.   </PropertyGroup>
  8.   <ItemGroup>
  9.     <FrameworkReference Include="Microsoft.AspNetCore.App" />
  10.     <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.0" />
  11.     <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
  12.   </ItemGroup>
  13. </Project>
复制代码
AMO.Core 项目新增文件夹 StartupExtensions 以后依赖项的管理都在该文件夹下。
创建一个静态类 AppStart.cs ,定义 Run 静态方法,将 Program.cs 中服务注册和管道配置的代码迁移该方法中。
  1. using Microsoft.AspNetCore.Builder;
  2. using Microsoft.Extensions.DependencyInjection;
  3. using Microsoft.Extensions.Hosting;
  4. namespace AMO.Core.StartupExtensions
  5. {
  6.     /// <summary>
  7.     /// 启动程序
  8.     /// </summary>
  9.     public static class AppStart
  10.     {
  11.         /// <summary>
  12.         /// 运行程序
  13.         /// </summary>
  14.         /// <param name="builder">WebApplicationBuilder</param>
  15.         public static void Run(this WebApplicationBuilder builder)
  16.         {
  17.             // Add services to the container.
  18.             builder.Services.AddControllers();
  19.             // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
  20.             builder.Services.AddEndpointsApiExplorer();
  21.             builder.Services.AddSwaggerGen();
  22.             var app = builder.Build();
  23.             // Configure the HTTP request pipeline.
  24.             if (app.Environment.IsDevelopment())
  25.             {
  26.                 app.UseSwagger();
  27.                 app.UseSwaggerUI();
  28.             }
  29.             app.UseHttpsRedirection();
  30.             app.UseAuthorization();
  31.             app.MapControllers();
  32.             app.Run();
  33.         }
  34.     }
  35. }
复制代码
修改 AMO.API 项目文件,引入 AMO.Core 的项目引用,删除 Swagger 包。
  1. <Project Sdk="Microsoft.NET.Sdk.Web">
  2.   <PropertyGroup>
  3.     <TargetFramework>net7.0</TargetFramework>
  4.     <Nullable>enable</Nullable>
  5.     <ImplicitUsings>enable</ImplicitUsings>
  6.   </PropertyGroup>
  7.   <ItemGroup>
  8.     <ProjectReference Include="..\AMO.Core\AMO.Core.csproj" />
  9.   </ItemGroup>
  10. </Project>
复制代码
在 Program.cs 使用扩展方法。
  1. using AMO.Core.StartupExtensions;
  2. namespace AMO.API
  3. {
  4.     public class Program
  5.     {
  6.         public static void Main(string[] args)
  7.         {
  8.              WebApplication.CreateBuilder(args).Run();
  9.         }
  10.     }
  11. }
复制代码
最后

生成解决方案,启动项目。熟悉的 Swagger 页面出来了。

之所以这么改造,主要目的是将后端框架的基础服务抽离到 AMO.Core 项目中,以便以后有新项目,能够快速复用。
当然,你可以发现 Program.cs 清爽了,但 AppStart.cs 后续引入新的包后,还不是一样会臃肿?
那么,后续我们将继续对 AppStart.cs 进一步优化。
题外

近期我司开源了一套简洁又功能完整的WMS系统: ModernWMS,采用 Vue3 + TS + Vuetify + .Net7 + EF Core 框架。欢迎来踩。
在线体验地址: https://wmsonline.ikeyly.com/
Github: https://github.com/fjykTec/ModernWMS
Gitee:https://gitee.com/modernwms/ModernWMS

来源:https://www.cnblogs.com/amo35/archive/2023/01/29/17071735.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具