[轉].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();

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

640?wx_fmt=png

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

Anet 的目前狀態

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

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


---------------------
作者:dotNET跨平臺
來源:CSDN
原文:https://blog.csdn.net/sD7O95O/article/details/87400458
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285648.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285648.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285648.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【天工Godwork精品教程】任務四:EOS正射影像DOM生成,DOM精編

無人機航測精品專欄鏈接:《無人機航空攝影測量精品教程》 【天工Godwork精品教程】任務一:創建工程(導入相片、編輯相機參數、導入POS) 【天工Godwork精品教程】任務二:導入控制點、POS權重設置、自由空三 【天工Godwork精品教程】任務三:刺像控點、空三平差、精度優化調…

強烈推薦國內幾款優秀的開源電商系統

一、背景需求 我玩得好的朋友剛創業&#xff0c;搞電商最一塊&#xff0c;想做個全套的電商框架系統&#xff0c;希望支持公眾號、小程序、H5、pc后臺管理等功能&#xff0c;創業初期資金非常緊張&#xff0c;請開發人員做成本太高&#xff0c;然后就咨詢我&#xff0c;有沒有最…

Maui的學習之路(二)--設置

Maui的學習之路&#xff08;二&#xff09; -- 設置上一篇我們做了Maui的基本介紹&#xff0c;理論上這一篇應該會創建第一個Maui的應用&#xff0c;以便對此進行詳細的評估&#xff0c;并逐步深入。如果你需要進行Maui首個應用的創建&#xff0c;那么歡迎訪問.NET MAUI 創建移…

今天,Java編程周末提高班(第一期)正式結束

Java編程周末提高班&#xff08;第一期&#xff09;&#xff0c;走過了近兩個月歷程&#xff0c;一共同擁有68人次學生周末到老師家進行Java學習與交流。近距離的和一群年輕的學習接觸&#xff0c;收獲非常多&#xff0c;特別是對以后教學的改進。在學習的閑暇。大家自己做飯&a…

基本反射了解

1 package cn.wh;2 /**3 * java.lang.Class4 * author 王恒5 * time 2016年11月2日 上午10:39:256 */7 public class RedlectTest {8 public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {9 …

【PhotoScan精品教程】任務四:PhotoScan做空三+CC生成正射、三維建模綜合案例

《無人機航空攝影測量精品教程》合集目錄(Pix4d、CC、EPS、PhotoScan、Inpho、GodWork) 【PhotoScan精品教程】任務一:新建工程、導入照片、設置坐標系、導入控制點(POS)、自由空三 【PhotoScan精品教程】任務二:刺像控點,平差,質量報告精度檢查,像控點POS權重調配 【…

[轉]讓.NET應用秒變微服務

隨著近年來微服務的發展&#xff0c;許多團隊開始將自己的單體應用改造為微服務。通常Java或Go的應用可以通過業界已有的微服務框架作為微服務開發和改造的底座&#xff0c;封裝掉解決跨網絡問題帶來的復雜性。但以Chassis模式進行的微服務改造有兩大問題&#xff1a;多語言框架…

C語言九十三之輸入一個字符x,找到輸入的那句話(字符串)里面一樣字母的位置。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 輸入一個字…

WPF 使用 MAUI 的自繪制邏輯

這是一個當前還沒開發完成的功能&#xff0c;準確來說連預覽版也算不上的功能。我原本以為 MAUI 是無法在 WPF 上面跑的&#xff0c;然而在看完了 MAUI 整個大的設計&#xff0c;才了解到&#xff0c;原來 MAUI 是一個非常龐大的開發項目。在 MAUI 里面&#xff0c;雖然現在是正…

[轉]redis 5.0.5 5分鐘搭建redis集群

環境&#xff1a;centos 7 1&#xff1a;下載并安裝redis ???????$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz$ tar xzf redis-5.0.5.tar.gz$ cd redis-5.0.5$ make redis 5.0版本 集群搭建不需要我們安裝ruby就可以搭建成功&#xff0c;并且redis…

【土地評價與土地管理】案例:某地區柑橘種植適宜性評價

文章目錄 一、確定評價單元二、評價因子選擇三、評價因子權重的確定四、構建評價分級標準五、綜合評價六、適宜性等級劃分七、得出適宜性評價結果柑橘種植所需的自然條件: 柑橘果樹生長發育、開花結果與溫度、日照、水分(濕度)、土壤以及風、海拔、地形和坡向等環境條件緊密相…

django中怎樣生成非HTML格式的內容。

某些時候可能有這種需求。在網頁中點擊一個鏈接或者一個button希望返回一張圖片、一個pdf文檔、一個csv文檔等而非HTML。在diango中非常easy做到這些。django中的view用來接收http request并返回web response。通常情況下&#xff0c;返回的內容為HTML&#xff0c;但其可以返回…

Window.document對象

一、找到元素&#xff1a; docunment.getElementById("id")&#xff1b;根據id找&#xff0c;最多找一個&#xff1b; var a docunment.getElementById("id");將找到的元素放在變量中&#xff1b; docunment.getElementsByName("name")&am…

C# 讀寫文件從用戶態切到內核態,到底是個什么流程?

一&#xff1a;背景 1. 一個很好奇的問題我們在學習 C# 的過程中&#xff0c;總會聽到一個詞叫做 內核態 &#xff0c;比如說用 C# 讀寫文件&#xff0c;會涉及到代碼從 用戶態 到 內核態 的切換&#xff0c;用 HttpClient 獲取遠端的數據&#xff0c;也會涉及到 用戶態 到 內核…

C語言九十四之請編寫函數fun(char *str, int n),其功能是:使字符串str的前導*號不能多余n個,若多于n個,則刪除多余的*號,若少于或等于n個,則不做處理。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 規定輸入的…

【土地評價與土地管理】案例:某地區土地農業利用潛力評價

文章目錄 一、確定評價單元二、擬定潛力評價系統表、確定指標權重三、指標評價四、評定潛力等級五、得出潛力評價結果一、確定評價單元 土地潛力評價單元采用地塊作為評價單元,此地塊是建立在土地利用現狀的基礎上, 綜合土地的自然屬性來確定,評價單元界線與土地現有界線基本…

WIKIOI 1519 過路費

1519 過路費 1519 過路費 時間限制: 1 s 空間限制: 256000 KB 題目等級 : 大師 Master 題解 題目描述 Description 在某個遙遠的國家里&#xff0c;有 n個城市。編號為 1,2,3,…,n。這個國家的政府修建了m 條雙向道路&#xff0c;每條道路連接著兩個城市。政府規定從城市…

code point,code unit

2019獨角獸企業重金招聘Python工程師標準>>> 從一段API描述談起&#xff1a; 在String的length的API中描述是這樣的&#xff01; lengthpublic int length() Returns the length of this string. The length is equal to the number of 16-bit Unicode characters i…

Android之解決JsonObject里面的JsonArray數據會有斜杠問題

1、問題 本地保存了多個json格式的字符串 {"event":"sdk_ad_request_status","timestamp":1640180549231,"ad_app_id":"10104","pool_test":0,"ad_type":0,"ad_request_time":0,"requ…

【土地評價與土地管理】案例:蘭州市榆中縣農用地分等

文章目錄 一、資料收集二、確定標準耕作制度、基準作物、指定作物、光溫(氣候生產潛力)三、劃分指標區,確定分等因素及權重四、編制“指定作物-分等因素-自然質量分”記分規則表五、繪制分等因素分值圖,劃分分等單元六、計算農用地自然質量分七、計算自然質量等指數八、計算…