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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net Core AA.FrameWork应用框架介绍

發布時間:2023/12/4 asp.net 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net Core AA.FrameWork应用框架介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?開發多年,一直在從社區獲取開源的便利,也深感社區力量的重要性,今天開源一個應用基礎框架AA.FrameWork,也算是回饋社區,做出一點點貢獻,希望能夠幫助類似當年入行的我。

?

?AA.FrameWork 是基于.NET core流行的開源類庫創建的基礎應用框架。

?框架代碼圖如:

源代碼github地址:https://github.com/ChengLab/AAFrameWork

nuget管理中,搜索前綴名稱 AA 即可如圖

Nuget Packages

Packagedescription
AA.Dapper基于dapper,Dapper-FluentMap 開發 , 支持工作單元、倉儲模式和原生dapper的操作
AA.Log4Net基于Log4net開發,提供常用的日志操作類
AA.FrameWork基礎框架
AA.Redis基于StackExchange.Redis開發,提供各種redis操作和基于redis的分布式鎖
AA.AutoMapper基于AutoMapper開發,對象映射
AA.ServiceBus基于MassTransit開發的服務總線 ;很方便的應用在event bus 和 publish/subscribe 場景
AA.AspNetCoreaspnetcore常用類集合

實體映射配置AA.Dapper用法

使用DommelEntityMap<TEntity>類映射屬性名稱。創建一個派生類,在構造函數中設置Map方法,可指定某個屬性映射到數據庫列名

public class UserInfoMap : DommelEntityMap<UserInfo>{public UserInfoMap(){ToTable("Sys_UserInfo");//映射具體的表名Map(p => p.SysNo).IsKey();//指定主鍵 ,IsIdentity是否自增Map(p=>p.GmtCreate).ToColumn("GmtCreateDate"); //屬性名和數據庫列名 可以不同Map(p=>p.LastLoginDate).Ignore();//一些計算屬性,可以忽略不需要跟數據庫列進行映射}}

使用MapConfiguration.Init方法,把映射類初始化,后續就可以使用了

public static void InitMapCfgs(){var fluentMapconfig = new List<Action<FluentMapConfiguration>>();fluentMapconfig.Add(cfg =>{cfg.AddMap(new UserInfoMap());});MapConfiguration.Init(fluentMapconfig);}

開始使用AA.Dapper

使用DapperContext設置數據庫連接和數據庫類型是sqlserver還是mysql
public class AADapperContext : DapperContext{public AADapperContext() : base(new NameValueCollection(){["aa.dataSource.AaCenter.connectionString"] = "Data Source =.; Initial Catalog = AaCenter;User ID = sa; Password = 123;",["aa.dataSource.AaCenter.provider"] = "SqlServer"}){ }}
倉儲包含了大部分的操作,同時支持Async操作
IDapperRepository<UserInfo> userInfoRepository = new DapperRepository<UserInfo>();
插入實體
var user = new UserInfo(){UserName = "chengTian",RealName = "成天",GmtCreate = DateTime.Now,GmtModified = DateTime.Now};var result = userInfoRepository.Insert(user);
修改實體
var user = userInfoRepository.Get(1);user.GmtModified = DateTime.Now;var result = userInfoRepository.Update(user);
獲取實體
var user = userInfoRepository.Get(1);//By 主鍵var users = userInfoRepository.GetAll();//所有var users = userInfoRepository.Select(p => p.UserName == "chengTian");//謂詞
刪除實體
var user = userInfoRepository.Get(1);var result = userInfoRepository.Delete(user);
支持Dapper原生操作

操作基本的封裝都是單表的操作,可以滿足一部分業務開發,有些業務場景編寫sql還是比較合適的比如報表和一些復雜的查詢,推薦使用原生dapper的操作

public class UserInfoRepository : DapperRepository<UserInfo>, IUserInfoRepository{private readonly IDapperContext _dapperContext;public UserInfoRepository(IDapperContext context){_dapperContext = context;}public IEnumerable<UserInfo> QueryAll(){var result = _dapperContext.DataBase.Query<UserInfo>("SELECT * from [Sys_UserInfo]");//實例return result;}}

AA.Log4Net 用法

  • log4net.config 配置,并將log4net.config的屬性->復制到輸出目錄->設置為->始終復制

  • Log4NetLogger.Use("配置文件名或者路徑+配置文件名"); 例如:log4net.config文件在根目錄下,Log4NetLogger.Use("log4net.config");如果在自定義文件中;例如config/log4net.config 則Log4NetLogger.Use("config/log4net.config")

  • ILog log= Logger.Get(typeof(類)); log.Debug("example");

  • AA.ServiceBus 用法

    生產者(事件和命令兩種類型)

    實例化bus

    //事件IBusControl busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword).BuildEventProducer();//命令ISendEndpoint busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword).BuildCommandProducer(queueName);

    實例化bus之后可以使用發送和發布兩個方法

    //命令TaskUtil.Await(busControl.Send<SubmitOrder>(new{Id = 10}));//事件 TaskUtil.Await(busControl.Publish<OrderSubmitted>(new{Id = 1}));
    消費者
    [Fact]public void TestConsumer(){Log4NetLogger.Use("Log4Net/log4net.config");string rabbitMqUri = "rabbitmq://localhost:5672";string rabbitMqUserName = "";string rabbitMqPassword = "";string queueName = "order.queue";var busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword).RegisterConsumer<SubmitOrderCommandConsumer>(queueName)//注冊命令消費者.RegisterConsumer<OrderSubmittedEventConsumer>(null)//注冊事件消費者.Build();busControl.Start();}

    定義消費者需要實現接口IConsumer

    public class OrderSubmittedEventConsumer : IConsumer<OrderSubmitted>{public async Task Consume(ConsumeContext<OrderSubmitted> context){var @event = context.Message;var result = $"OrderSubmittedEvent {@event.Id.ToString()}";ILog log = Logger.Get(typeof(OrderSubmittedEventConsumer));log.Debug(result);//do somethings...}}public class SubmitOrderCommandConsumer : IConsumer<SubmitOrder>{public async Task Consume(ConsumeContext<SubmitOrder> context){var command = context.Message;var result = $"CreateFooCommand {command.Id.ToString()}";ILog log = Logger.Get(typeof(SubmitOrderCommandConsumer));log.Debug(result);//do somethings...}}

    AA.AutoMapper用法

    實現IMapperConfiguration接口,創建映射規則配置
    public class WebMapperConfigurations : IMapperConfiguration{public int Order { get { return 0; } }public Action<IMapperConfigurationExpression> GetConfiguration(){Action<IMapperConfigurationExpression> action = cfg =>{cfg.CreateMap<UserVm, UserInput>();};return action;}}
    在程序startup調用配置
    var mapperConfig = new WebMapperConfigurations();AutoMapperConfiguration.Init(new List<Action<IMapperConfigurationExpression>> { mapperConfig.GetConfiguration() });ObjectMapping.ObjectMapManager.ObjectMapper = new AutoMapperObjectMapper();
    利用擴展方法MapTo執行映射
    [Fact]public void TestMap(){//initInit();UserVm userVm = new UserVm { Id = 1, Name = "成天" ,Remark="微信公眾號:dotNet知音"};var userDto = userVm.MapTo<UserInput>();//var userDto2 = userVm.MapTo<UserVm,UserInput>();}

    后面也會提供基于AA框架的應用實例,有問題可以聯系我,一起交流和成長。

    總結

    以上是生活随笔為你收集整理的.Net Core AA.FrameWork应用框架介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。