使用 Anet 有一段时间了,已经在我的个人网站(如 bookist.cc)投入使用,目前没有发现什么大问题,所以才敢写篇文章向大家介绍。

GitHub 地址:

https://github.com/anet-team/anet

Anet 是一个 .NET Core 通用框架,特点是简单易用。它的目标是:

A .NET Core Common Lib, Framework and Boilerplate.

它的取名正是来自于这个定义的前面四个字母:ANET。Anet 的宗旨是使 .NET 项目开发变得简单和快速。它适用于面向微服务开发 WebAPI、服务程序和网站。

Anet 说是框架,其实特别简单,几乎没有学习成本。

为什么选择 Anet

很多传统的 .NET 开源框架模板(比如 ABP)都比较重,学习成本高,使用起来条条框框,比较麻烦。而 Anet 就简单易用得多,尤其适合面向微服务快速开发。

和其它模板框架一样,Anet 封装了一些实用工具类,集成了轻量 ORM 框架 Dapper。但 Anet 对 Dapper 做了一些改进,使得事务可以放在业务层独立处理,数据访问层则不需要关心事务(下文有示例)。

Anet 的使用

下面贴一些 Anet 的使用示例,这些示例代码都可以在 Anet 的 GitHub 仓库中找到。

使用前先安装 Nuget 包:

Install-Package Anet# 或者dotnet add package Anet

1. 查询操作

public class UserRepository : RepositoryBase<AnetUser>{    public UserRepository(Database db) : base(db)    {    }

    public Task<IEnumerable<UserResponseDto>> GetAllAsync()    {        var sql = "SELECT * FROM AnetUser;";        return Db.QueryAsync<UserResponseDto>(sql);    }

    public Task<UserResponseDto> GetByIdAsync(long id)    {        var sql = Sql.Select("AnetUser", new { Id = id });        return Db.QueryFirstOrDefaultAsync<UserResponseDto>(sql);    }}

2. 新增操作

public class UserService{    private readonly UserRepository userRepository;    public UserService(UserRepository userRepository)    {        this.userRepository = userRepository;    }

    public async Task CreateUserAsync(UserRequestDto dto)    {        var newUser = new AnetUser { UserName = dto.UserName };

        using (var tran = userRepository.BeginTransaction())        {            await userRepository.InsertAsync(newUser);

            // Other business logic code.

            tran.Commit();        }    }

    // ...(其它代码)}

3. 更新操作

public class UserService{    private readonly UserRepository userRepository;    public UserService(UserRepository userRepository)    {        this.userRepository = userRepository;    }

    public async Task UpdateUserAsync(long userId, UserRequestDto dto)    {        var user = await userRepository.FindAsync(userId);        if (user == null)            throw new NotFoundException();

        using(var tran = userRepository.BeginTransaction())        {            await userRepository.UpdateAsync(                update: new { dto.UserName },                clause: new { Id = userId });

            tran.Commit();        }    }

    // ...(其它代码)}

4. 删除操作

public class UserService{    private readonly UserRepository userRepository;    public UserService(UserRepository userRepository)    {        this.userRepository = userRepository;    }

    public async Task DeleteUserAsync(long id)    {        var rows = await userRepository.DeleteAsync(id);        if (rows == 0)            throw new NotFoundException();    }

    // ...(其它代码)}

5. 定时任务

Anet 封装了一个 JobScheduler,它可以满足大部分任务调度的需求。下面演示如何通过 Anet 来实现一个简单任务轮循程序,模拟一个发送消息的任务调度服务。这个示例也可以在 GitHub 仓库中找到源代码。

首先创建一个 Console(.NET Core)应用,需要先安装 Anet 的两个包:

Install-Package AnetInstall-Package Anet.Job

要添加一个定时任务就添加一个 IJob 接口的实现。这里添加一个 MessageJob 类,使它实现 IJob 接口,代码如下:

public class MessageJob : IJob{    private readonly ILogger<MessageJob> _logger;    public MessageJob(ILogger<MessageJob> logger)    {        _logger = logger;    }

    public Task ExecuteAsync()    {        // 模拟异步发送消息        return Task.Run(() =>        {            _logger.LogInformation("正在发送消息...");            Thread.Sleep(3000);            _logger.LogInformation("消息发送成功。");        });    }

    public Task OnExceptionAsync(Exception ex)    {        _logger.LogError(ex,"发送消息出错。");        return Task.FromResult(0);    }}

你要关心的就是 ExecuteAsync 方法,把你的执行代码放在此方法中。

然后只需在 Program.cs 的入口 Main 方法中进行初始化和配置即可,例如:

// 初始化应用App.Init((config, services) =>{    // 绑定配置    Settings = new SettingsModel();    config.Bind(Settings);

    // 注册服务    services.AddTransient<MessageJob>();});

var logger = App.ServiceProvider.GetRequiredService<ILogger<Program>>();

logger.LogInformation("程序已启动。");

// 启动定时轮循任务Scheduler.StartNew<MessageJob>(Settings.JobIntervalSeconds);

logger.LogInformation("已启动消息发送任务处理程序。");

// 等待程序关闭Scheduler.WaitForShutdown();

一个简单的消息发送服务就做好了,每隔指定秒数就会执行发送任务。运行后在控制台看到的效果是:

这个示例包含了记录日志,控制台上的信息都是临时的,你也可以查看运行目录下的 logs 文件夹中的日志文件。完整代码请前往 GitHub 查看。

Anet 的目前状态

Anet 才刚起步,处在最小可用状态。它目前只是一个通用库,封装了一些常用的类(比如基于 Snowflake 算法的 Id 生成器、用户密码加密等),还算不上框架,还有很多事情要做,连 Wiki 文档都没有,后面再慢慢补吧。

但一个人的力量终究是有限的,特别希望大家能加入到这个项目中和我一起开发。

.NET 开源项目 Anet 介绍相关推荐

  1. [转].NET 开源项目 Anet 介绍

    使用 Anet 有一段时间了,已经在我的个人网站(如 bookist.cc)投入使用,目前没有发现什么大问题,所以才敢写篇文章向大家介绍. GitHub 地址: https://github.com/ ...

  2. .NET 开源项目 StreamJsonRpc 介绍[下篇]

    阅读本文大概需要 9 分钟. 大家好,这是 .NET 开源项目 StreamJsonRpc 介绍的最后一篇.上篇介绍了一些预备知识,包括 JSON-RPC 协议介绍,StreamJsonRpc 是一个 ...

  3. Otter(阿里开源项目Otter介绍)

    1.Otter-入门篇1(阿里开源项目Otter介绍) https://my.oschina.net/wenzhenxi/blog/719095 2.Otter-入门篇2(Manager安装配置) h ...

  4. 工业通信的开源项目 HslCommunication 介绍

    前言: 本项目的孵化说来也是机缘巧合的事,本人于13年杭州某大学毕业后去了一家大型的国企工作,慢慢的走上了工业软件,上位机软件开发的道路.于14年正式开发基于windows的软件,当时可选的技术栈就是 ...

  5. .NET Core 开源项目 Anet 在路上

    今天给大家介绍我刚开源的一个 .NET Core 项目:Anet.Anet 的目标是实现一个 .NET Core 通用库.通用框架和通用模板.我给它的定义是: A .NET Core Common L ...

  6. [转].NET 开源项目 Polly 介绍

    今天介绍一个 .NET 开源库:Polly,它是支持 .NET Core 的,目前在 GitHub 的 Star 数量已经接近 5 千,它是一个强大且实用的 .NET 库. Polly 介绍 官方对 ...

  7. 各类值得收藏的开源项目推荐介绍

    一.背景 对于测开同学来讲,现在想要开发一个项目,很多时候都不需要自己从零开始重复造轮子.目前市面上已经很多大佬们开源了一些非常不错的项目可以供大家学习借鉴使用,因此本篇文章为大家介绍搜集到的一些不错 ...

  8. .NET 开源项目 StreamJsonRpc 介绍[上篇]

    StreamJsonRpc 是一个实现了 JSON-RPC 通信协议的开源 .NET 库,在介绍 StreamJsonRpc 之前,我们先来了解一下 JSON-RPC. JSON-RPC 介绍 JSO ...

  9. 像用Oracle一样用openGauss - 云和恩墨开源项目compat-tools介绍

    点击上方"蓝字" 关注我们,享更多干货! 近年来,随着国产数据库势如破竹般地快速发展,作为开源世界新生力量的openGauss亦得到了市场的青睐,尤其在云和恩墨推出的商业发行版Mo ...

最新文章

  1. maven项目的构建命令
  2. 超实用的 Mybatis 3.5 新特性
  3. java qq音乐接口 api,QQ音乐解析API接口更新:支持HQ,ape,flac无损音质,缓存功能
  4. java调用webservice几种方式
  5. NYOJ 1053 Alice and Bob (N)
  6. 阅读吴军《信息时代对人才技能的要求》
  7. java 异常限制_java的异常限制
  8. OpenShift 4 - 获取能访问API服务的用户认证Token
  9. 使用template.js加载后端数据
  10. 去掉IE上的 单击以激活和使用此控件 提示
  11. 【02】 PC端网页布局之CSS3-pink老师-2022/03
  12. 同步Chrome浏览器插件
  13. CVE-2013-5211漏洞整改方法
  14. plot confusion_matrix
  15. 基于贝叶斯公式的拼音输入法二元模型实现
  16. app抓包服务器证书错误,Fiddler抓包iOS出现证书错误的解决办法
  17. 李航统计学习方法笔记——泛化误差上界
  18. 计算机系统相关(嵌入式)
  19. 看!Tiktok 还能这样为亚马逊店铺引流?--TK领航社最新电商变现干货分享
  20. Python实战 -- 利用Flask搭建微电影网站(一)蓝图构建

热门文章

  1. 【前端基础进阶】JS-Object 功能详解
  2. 编辑器领域正发生变革?从面试看 Visual Studio Code 的崛起
  3. Python_list部分功能介绍
  4. 简单获取任意app的URL Schemes
  5. 介绍一个代码管理系统-Git
  6. spring boot aop 记录方法执行时间
  7. Jenkins入门系列之——03PDF文档下载
  8. EFDC水模型 初学者入门 及软件下载学习指导
  9. android学习笔记之多线程(二)
  10. 全程图解:Centos 5.2 下 ORACLE10G 安装配置