我是靠谱客的博主 怕孤独老师,这篇文章主要介绍如何更好地组织最小 WEB API 代码结构前言1. 静态帮助类2. 扩展方法3. 依赖注入结论,现在分享给大家,希望可以做个参考。

前言

我们在《.NET 6新特性试用》中讲过,随着项目需求和复杂性的增加,单个文件的最小 WEB API 会变得非常臃肿。

而且,Program.cs 应该只放启动和初始化代码。不应该包含太多 MapXXX 方法。

那么,如何以更好的方式组织最小 WEB API 代码结构呢?

1. 静态帮助类

可以将它们移到单独的类中。

例如,你可以创建一个名为 MinimalApiHelper 的静态类并向其添加静态方法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static class MinimalApiHelper {     public static void RegisterWeatherForecastAPIs(WebApplication app)     {         var summaries = new[]         {             "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"         };         app.MapGet("/weatherforecast", () =>         {             ......         })         .WithName("GetWeatherForecast");     } }

Program.cs 修改如下:

复制代码
1
2
3
4
...... app.UseHttpsRedirection(); MinimalApiHelper.RegisterWeatherForecastAPIs(app); app.Run();

2. 扩展方法

更进一步,可以将这些静态方法创建为 WebApplication 类的扩展方法:

复制代码
1
2
3
4
public static void RegisterWeatherForecastAPIs(this WebApplication app) {     ...... }

可以像这样简化调用代码:

复制代码
1
2
3
...... app.RegisterWeatherForecastAPIs(); app.Run();

3. 依赖注入

但是,存在大量服务时,需要多次执行注册代码:

复制代码
1
2
3
app.RegisterService1APIs(); app.RegisterService2APIs(); ......

我们可以使用依赖注入简化注册代码。

实现代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public  static class MinimalApiExtentions {     public static void AddMinimalApiRegisters(this IServiceCollection services, params Type[] types)     {         var registers = new List<IMinimalApiRegister>();         foreach (var type in types)         {             registers.AddRange(type.Assembly.GetTypes()                 .Where(x => typeof(IMinimalApiRegister).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract)                 .Select(Activator.CreateInstance).Cast<IMinimalApiRegister>());         }         services.AddSingleton<IEnumerable<IMinimalApiRegister>>(registers);     }     public static void UseMinimalApiRegisters(this WebApplication app)     {         var registers = app.Services.GetRequiredService<IEnumerable<IMinimalApiRegister>>();         foreach (var register in registers)         {             register.RegisterAPIs(app);         }     } }

Program.cs 修改如下:

复制代码
1
2
3
4
5
var builder = WebApplication.CreateBuilder(args); builder.Services.AddMinimalApiRegisters(typeof(Program)); var app = builder.Build(); app.UseMinimalApiRegisters(); app.Run();

遍历程序集中的所有 IMinimalApiRegister 实现类,然后遍历调用实现类的 RegisterAPIs 方法。

示例实现类如下:

复制代码
1
2
3
4
5
6
7
public class Service1Register : IMinimalApiRegister {      public void RegisterAPIs(WebApplication app)     {         app.MapGet("/", () => "Hello My IO");     } }

结论

今天,我们介绍了如何组织最小 WEB API 代码结构。

如果你有更好的方案,欢迎到我的公众号“My IO”留言讨论

最后

以上就是怕孤独老师最近收集整理的关于如何更好地组织最小 WEB API 代码结构前言1. 静态帮助类2. 扩展方法3. 依赖注入结论的全部内容,更多相关如何更好地组织最小内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部