日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET 开源项目 Anet 介绍

發(fā)布時間:2023/12/4 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET 开源项目 Anet 介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用 Anet 有一段時間了,已經(jīng)在我的個人網(wǎng)站(如 bookist.cc)投入使用,目前沒有發(fā)現(xiàn)什么大問題,所以才敢寫篇文章向大家介紹。

GitHub 地址:

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

Anet 是一個 .NET Core 通用框架,特點是簡單易用。它的目標(biāo)是:

A .NET Core Common Lib, Framework and Boilerplate.

它的取名正是來自于這個定義的前面四個字母:ANET。Anet 的宗旨是使 .NET 項目開發(fā)變得簡單和快速。它適用于面向微服務(wù)開發(fā) WebAPI、服務(wù)程序和網(wǎng)站。

Anet 說是框架,其實特別簡單,幾乎沒有學(xué)習(xí)成本。

為什么選擇 Anet

很多傳統(tǒng)的 .NET 開源框架模板(比如 ABP)都比較重,學(xué)習(xí)成本高,使用起來條條框框,比較麻煩。而 Anet 就簡單易用得多,尤其適合面向微服務(wù)快速開發(fā)。

和其它模板框架一樣,Anet 封裝了一些實用工具類,集成了輕量 ORM 框架 Dapper。但 Anet 對 Dapper 做了一些改進,使得事務(wù)可以放在業(yè)務(wù)層獨立處理,數(shù)據(jù)訪問層則不需要關(guān)心事務(wù)(下文有示例)。

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. 定時任務(wù)

Anet 封裝了一個 JobScheduler,它可以滿足大部分任務(wù)調(diào)度的需求。下面演示如何通過 Anet 來實現(xiàn)一個簡單任務(wù)輪循程序,模擬一個發(fā)送消息的任務(wù)調(diào)度服務(wù)。這個示例也可以在 GitHub 倉庫中找到源代碼。

首先創(chuàng)建一個 Console(.NET Core)應(yīng)用,需要先安裝 Anet 的兩個包:

Install-Package Anet
Install-Package Anet.Job

要添加一個定時任務(wù)就添加一個 IJob 接口的實現(xiàn)。這里添加一個 MessageJob 類,使它實現(xiàn) IJob 接口,代碼如下:

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

? ?public Task ExecuteAsync()
? ?
{
? ? ? ?// 模擬異步發(fā)送消息
? ? ? ?return Task.Run(() =>
? ? ? ?{
? ? ? ? ? ?_logger.LogInformation("正在發(fā)送消息...");
? ? ? ? ? ?Thread.Sleep(3000);
? ? ? ? ? ?_logger.LogInformation("消息發(fā)送成功。");
? ? ? ?});
? ?}

? ?public Task OnExceptionAsync(Exception ex)
? ?
{
? ? ? ?_logger.LogError(ex,"發(fā)送消息出錯。");
? ? ? ?return Task.FromResult(0);
? ?}
}

你要關(guān)心的就是?ExecuteAsync?方法,把你的執(zhí)行代碼放在此方法中。

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

// 初始化應(yīng)用
App.Init((config, services) =>
{
? ?// 綁定配置
? ?Settings = new SettingsModel();
? ?config.Bind(Settings);

? ?// 注冊服務(wù)
? ?services.AddTransient<MessageJob>();
});

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

logger.LogInformation("程序已啟動。");

// 啟動定時輪循任務(wù)
Scheduler.StartNew<MessageJob>(Settings.JobIntervalSeconds);

logger.LogInformation("已啟動消息發(fā)送任務(wù)處理程序。");

// 等待程序關(guān)閉
Scheduler.WaitForShutdown();

一個簡單的消息發(fā)送服務(wù)就做好了,每隔指定秒數(shù)就會執(zhí)行發(fā)送任務(wù)。運行后在控制臺看到的效果是:

這個示例包含了記錄日志,控制臺上的信息都是臨時的,你也可以查看運行目錄下的 logs 文件夾中的日志文件。完整代碼請前往 GitHub 查看。

Anet 的目前狀態(tài)

Anet 才剛起步,處在最小可用狀態(tài)。它目前只是一個通用庫,封裝了一些常用的類(比如基于 Snowflake 算法的 Id 生成器、用戶密碼加密等),還算不上框架,還有很多事情要做,連 Wiki 文檔都沒有,后面再慢慢補吧。

但一個人的力量終究是有限的,特別希望大家能加入到這個項目中和我一起開發(fā)。

總結(jié)

以上是生活随笔為你收集整理的.NET 开源项目 Anet 介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。