前言
如果你的控制器代码像下面一样,只是对业务层做一层转发,那么能否将这个控制器“动态创建”,让开发只需要关注业务代码就行呢?答案是可以的。
public class UserController:ControllerBase
{
private readonly IUserAppService _userAppService;
public UserController(IUserAppService userAppService) => _userAppService = userAppService;
[HttpGet]
public async Task<PageResult<List<xxxDto>>> GetListAsync(xxxDto input)
{
//控制器层什么都没有干,只是为了转发下业务层
return await _userAppService.GetListAsync(input);
}
//省略……
}
先看下最终的效果图
- 本文章的代码:https://gitee.com/fengwuyan/auto-api-demo
- 正在使用NET.AutoApi的框架: Yi.Framework
简介
NET.AutoApi
是一个用于“动态创建”webapi接口的包,之所以动态创建打上引号,是因为其底层是根据 AspNetCore 抛出的扩展,能够将任何类转换成控制器,并在程序初始化的时候给每个类的方法动态加上控制器方法的特性。下一篇文章,我会讲下内部是怎么实现的。那么我们闲话少说,我们以一个简单地三层架构项目来直入主题。
项目示例
我这边以一个用户的增删改查来示例
项目结构
第一步:在 Demo.Service.Abstracts
引入 NET.AutoApi
dotnet add package NET.AutoApi
第二步:让IUserService
继承 IAutoApiService
接口
public interface IUserService : IAutoApiService
{
public Task<(List<UserGetListOutput>, long)> GetListAsync(UserGetListInput input);
public Task<UserGetListOutput> CreateAsync(UserCreateUpdateInput input);
public Task<UserGetListOutput> UpdateAsync(int id, UserCreateUpdateInput input);
public Task<bool> DeleteAsync(int id);
public Task<bool> ImportAsync(IAutoApiStreamContent input);
}
第三步:实现IUserService接口
第四步:在WebApi的Program.cs
添加 AddAutoApiService
方法
最终效果
总结
NET.AutoApi
可以让我们的代码变得更加简洁,让开发只专注于业务代码实现,只需要两步配置,- 让我们的业务层代码实现:
IAutoApiService
接口 - 在Program类中添加
AddAutoApiService
和UseAutoApiService
方法
- 让我们的业务层代码实现:
本文章的代码:https://gitee.com/fengwuyan/auto-api-demo