我是靠谱客的博主 怕孤独老师,最近开发中收集的这篇文章主要介绍如何更好地组织最小 WEB API 代码结构前言1. 静态帮助类2. 扩展方法3. 依赖注入结论,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
前言
我们在《.NET 6新特性试用》中讲过,随着项目需求和复杂性的增加,单个文件的最小 WEB API 会变得非常臃肿。
而且,Program.cs 应该只放启动和初始化代码。不应该包含太多 MapXXX
方法。
那么,如何以更好的方式组织最小 WEB API 代码结构呢?
1. 静态帮助类
可以将它们移到单独的类中。
例如,你可以创建一个名为 MinimalApiHelper 的静态类并向其添加静态方法:
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 修改如下:
......
app.UseHttpsRedirection();
MinimalApiHelper.RegisterWeatherForecastAPIs(app);
app.Run();
2. 扩展方法
更进一步,可以将这些静态方法创建为 WebApplication 类的扩展方法:
public static void RegisterWeatherForecastAPIs(this WebApplication app)
{
......
}
可以像这样简化调用代码:
......
app.RegisterWeatherForecastAPIs();
app.Run();
3. 依赖注入
但是,存在大量服务时,需要多次执行注册代码:
app.RegisterService1APIs();
app.RegisterService2APIs();
......
我们可以使用依赖注入简化注册代码。
实现代码如下:
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 修改如下:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMinimalApiRegisters(typeof(Program));
var app = builder.Build();
app.UseMinimalApiRegisters();
app.Run();
遍历程序集中的所有 IMinimalApiRegister
实现类,然后遍历调用实现类的 RegisterAPIs
方法。
示例实现类如下:
public class Service1Register : IMinimalApiRegister
{
public void RegisterAPIs(WebApplication app)
{
app.MapGet("/", () => "Hello My IO");
}
}
结论
今天,我们介绍了如何组织最小 WEB API 代码结构。
如果你有更好的方案,欢迎到我的公众号“My IO”留言讨论
最后
以上就是怕孤独老师为你收集整理的如何更好地组织最小 WEB API 代码结构前言1. 静态帮助类2. 扩展方法3. 依赖注入结论的全部内容,希望文章能够帮你解决如何更好地组织最小 WEB API 代码结构前言1. 静态帮助类2. 扩展方法3. 依赖注入结论所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复