(asp.net core)Cike.AutoApi动态webapi接口,一个配置让你聚焦代码业务层

前言

如果你的控制器代码像下面一样,只是对业务层做一层转发,那么能否将这个控制器“动态创建”,让开发只需要关注业务代码就行呢?答案是可以的。

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);
    }
    //省略……
}

先看下最终的效果图

简介

Cike.AutoApi 是一个用于“动态创建”webapi接口的包,之所以动态创建打上引号,是因为其底层是根据 AspNetCore 抛出的扩展,能够将任何类转换成控制器,并在程序初始化的时候给每个类的方法动态加上控制器方法的特性。下一篇文章,我会讲下内部是怎么实现的。那么我们闲话少说,我们以一个简单地三层架构项目来直入主题。

项目示例

我这边以一个用户的增删改查来示例

项目结构

第一步:在 Demo.Service.Abstracts 引入 Cike.AutoApi

dotnet add package Cike.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方法

最终效果

总结

  • Cike.AutoApi 可以让我们的代码变得更加简洁,让开发只专注于业务代码实现,只需要以下步骤,
    1. 让我们的业务层代码实现:IAutoApiService 接口
    2. 在Program类中添加AddAutoApiService 方法

本文章的代码:https://gitee.com/fengwuyan/auto-api-demo

正在使用Cike.AutoApi的框架

posted @ 2023-01-14 21:44  隔壁老黎  阅读(239)  评论(0编辑  收藏  举报