.NET 开源项目 Anet 介绍

使用 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 Anet
Install-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 文档都没有,后面再慢慢补吧。

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

?

原文地址:https://www.cnblogs.com/willick/p/anet-introduction.html

时间: 2024-10-11 05:12:42

.NET 开源项目 Anet 介绍的相关文章

【转】apache开源项目的介绍

Jakarta项目是ASF(The Apache Software Foundation)的一部分.ASF是一个非赢利组织,她鼓励基于开放的软件许可下进行合作.注重实效的开发,并提供各个领域的高质量软件,她涉及到Http服务器,编译工具,类库,开发架构,服务器端Java技术,J2EE容器,数据库工具,日志工具,XML解析等等诸多领域.ASF提供的java项目有一部分在Jakarta中,还有一些成为独立的诸如Tomcat的项目,Jakarta项目则提供了多种多样开源的java解决通用方案. 先介绍

强大的HTTP包装开源项目ASIHTTPRequest介绍

ASIHTTPRequest 是一个直接在CFNetwork上做的开源项目,提供了一个比官方更方便更强大的HTTP网络传输的封装.它的特色功能如下: 1,下载的数据直接保存到内存或文件系统里 2,提供直接提交(HTTP POST)文件的API 3,可以直接访问与修改HTTP请求与响应HEADER 4,轻松获取上传与下载的进度信息 5,异步请求与队列,自动管理上传与下载队列管理机 6,认证与授权的支持 7,Cookie 8,请求与响应的GZIP 9,代理请求 源码:http://www.jinhu

可删除超炫&amp;amp;多种特效的Card视图(改造自cardsui-for-android开源项目),提供DEMO下载

       实例Demo下载地址在本文最后 简介 这个Demo主要是使用了cardsui-for-android开源项目,而且做了一些优化和改进: 1.自己定义card视图 2.加入长按事件.避免误操作 3.长按后能够删除card,并播放选中动画 4.删除后浮现一个悬浮button 5.点击悬浮button能够恢复之前删除的card视图 看内容前强烈建议先阅读下面的两篇文章,由于这个demo是在这两个文章的基础上写的: 关于cardsui-for-android这个开源项目的介绍和实现请看这篇

可删除超炫&amp;多种特效的Card视图(改造自cardsui-for-android开源项目),提供DEMO下载

       这里贴几个效果图,我做了一个gif的动态图,但是不知道为什么上传后图片不动,所以只能放在相册里. 如果大家想看动态的图片演示请点击后面的链接gif动态演示图片 实例Demo下载地址在本文最后 简单介绍 这个Demo主要是使用了cardsui-for-android开源项目,并且做了一些优化和改进: 1.自定义card视图 2.添加长按事件,避免误操作 3.长按后可以删除card,并播放选中动画 4.删除后浮现一个悬浮button 5.点击悬浮button可以恢复之前删除的card视

Android开源项目——带图标文字的底部导航栏IconTabPageIndicator

接下来的博客计划是,在<Android官方技术文档翻译>之间会发一些Android开源项目的介绍,直接剩下的几篇Android技术文档发完,然后就是Android开源项目和Gradle翻译了.当然,其他的文章笔记也会偶尔发一下. 本文原创,转载请注明在CSDN上的出处: http://blog.csdn.net/maosidiaoxian/article/details/42638245 简介 本篇文章介绍的是一个底部导航栏,叫IconTabPageIndicator,一个带图标文字的导航栏.

[转]GitHub 优秀的 Android 开源项目

GitHub 优秀的 Android 开源项目 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar及其他如Dialog.Toast.EditText.TableView.Activity Animation等等. 一.ListView android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新ListView.ViewPager.W

不可错过的几款GitHub开源项目

工作之余或者周末感觉无聊?不知道干什么?想继续提高技术,但是不知道做什么的同学,看过来,不妨利用闲暇时间来撸几个 GitHub 上还不错的开源项目,本文推荐的开源项目比较适合新手.及对MVP设计模式不太熟练的同学练习之用,下面逐一进行简单介绍. 1.ZhiHuMVP 一款采用 MVP 模式的仿知乎客户端. 本项目包含以下知识点: MVP架构思想 Retrofit RESTful API 框架的配合 RxJava 响应式编程 Butter Knife:通过注解绑定 View 夜间模式切换 效果图:

【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(一)

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在APP市场上,经常有一些充满新意的应用让我们眼前一亮,比如微信的面对面加好友,支付宝的声波支付等等,都是通过声波的方式进行握手通信,今天这篇文章将介绍声波通信和声波验证的实现原理和代码实现. 首先介绍一下声波验证的原理.如果我们想发出声音,就必须震动,说话是声带在震动,手机能播放音乐是喇叭在震动.既然发出声音必须震动,那么就有震动快慢之分,我们把震动的快慢叫做声音的频率.频率低的声音低沉有力,能传播很远

开源OSS.Social微信项目进阶介绍

在开源OSS.Social微信项目解析的随笔中,我简单给大家分享了进行中微信项目的概要设计,主要在讲述解决思路和过程,没有详细实现和使用介绍.本着不能马虎的态度,这篇文章我来给大家分解一下项目结构,使用方式以及后边的规划,希望能够让大家通达晓畅.同时,当前项目正在进行 .Net Standard 类库的过渡,相信一段时间之后就可以同时对 .net framework 和 .net core 提供支持. 这个项目是整个OSS系列开源项目之一,主要是对 社交化产品的接口包装,而微信项目是当前正在进行