开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我。

AA.FrameWork 是基于.NET core流行的开源类库创建的基础应用框架。

框架代码图如:

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

nuget管理中,搜索前缀名称 AA 即可如图

Nuget Packages

Package description
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.AspNetCore aspnetcore常用类集合

实体映射配置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 用法

  1. log4net.config 配置,并将log4net.config的属性->复制到输出目录->设置为->始终复制

  2. Log4NetLogger.Use("配置文件名或者路径+配置文件名"); 例如:log4net.config文件在根目录下,Log4NetLogger.Use("log4net.config");如果在自定义文件中;例如config/log4net.config 则Log4NetLogger.Use("config/log4net.config")

  3. 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应用框架介绍相关推荐

  1. dommel mysql_.Net Core AA.FrameWork应用框架介绍

    开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我. AA.FrameWork ...

  2. .Net Core 分布式微服务框架介绍 - Jimu

    .Net Core 分布式微服务框架介绍 - Jimu 系列文章 [原文] .Net Core 分布式微服务框架介绍 - Jimu [原文] .Net Core 分布式微服务框架 - Jimu 添加 ...

  3. Jimu : .Net Core 分布式微服务框架介绍

    一.前言 近些年一直浸淫在 .Net 平台做企业应用开发,用过的 .Net 框架不多(具体数量不清,印象深刻的有 Asp.Net MVC,WPF,其他很多都是基于微软开发的框架做些封装而形成新的框架, ...

  4. Radare2 框架介绍及使用

    Radare2 框架介绍及使用 欢迎入群交流 radare2 这是整个框架的核心工具,它具有debugger和Hexeditor的核心功能,使您能够像打开普通的文件一样,打开许多输入/输出源,包括磁盘 ...

  5. 手把手引进门之 ASP.NET Core Entity Framework Core(官方教程翻译版 版本3.2.5)

    以下是手把手引进门教程,基于 ASP.NET Core, Entity Framework Core ,ABP 框架 创建Web 应用, PS: 自带自动的测试模块哦. 样例下载 (上 github  ...

  6. 使用Angular 4、Bootstrap 4、TypeScript和ASP.NET Core开发的Apworks框架案例应用

    最近我为我自己的应用开发框架Apworks设计了一套案例应用程序,并以Apache 2.0开源,开源地址是:https://github.com/daxnet/apworks-examples,目的是 ...

  7. spring框架介绍_Spring框架介绍

    spring框架介绍 这是Spring框架和Spring核心概念的简介. 在本教程中,我们将介绍Spring Framework的主要优点和功能. 在随后的教程中,我们将学习有关Spring和Spri ...

  8. ASP.NET Core 入门教程 8、ASP.NET Core + Entity Framework Core 数据访问入门

    ASP.NET Core 入门教程 8.ASP.NET Core + Entity Framework Core 数据访问入门 原文:ASP.NET Core 入门教程 8.ASP.NET Core ...

  9. ❤️六万字《SpringMVC框架介绍—从入门到高级》(建议收藏)❤️

    <SpringMVC框架介绍>(建议收藏) ❤️希望博友给个三连+关注!!! SSM: mybatis + Spring + SpringMVC MVC三层架构 SpringMVC + V ...

最新文章

  1. PHP中的PathInfo
  2. 重启asp.net 命令
  3. adbunknown Host service问题修复
  4. Python几种加密算法
  5. Table 表格导出功能
  6. SMB MS17-010 利用(CVE-2017-0144 )
  7. leetcode 最长回文子串
  8. Android 系统(160)---Android 32/64 bits 升级准则
  9. 计算机组成原理期末考试题目及答案,计算机组成原理期末考试试题附标准答案.doc...
  10. Centos5上安装JRE和LUMAQQ
  11. STM32之定时器中断控制LED闪烁
  12. 北京工商大学c语言复试试题,2016年北京工商大学计算机与信息工程学院C语言程序设计复试笔试仿真模拟题...
  13. Django 查询表的几种方式
  14. PCHunter_32X64_2022_03最新版
  15. npm link详解
  16. vue第三天笔记04——安装node.js环境
  17. 【PS】如何把图片变成透明
  18. 顶刊TIP 2022!阿里提出:从分布视角出发理解和提升对抗样本的迁移性
  19. 解决Python安装pyqt5-tool出现的系列问题:ERROR: Could not find a version that satisfies the requirement xxx
  20. Zookeeper报错Will not attempt to authenticate using SASL解决办法

热门文章

  1. CSS/DIV网页设计视频教程目录【转】
  2. 命令行下的mysql的基本操作
  3. java 集合读写同步_JAVA多线程学习十六 - 同步集合类的应用
  4. Pixel相机是怎么做到自动补抓最不错的自拍照
  5. AWD-LSTM为什么这么棒?
  6. Spring Cloud Gateway 原生支持接口限流该怎么玩
  7. Python高级特性——迭代(Iteration)
  8. Spring Security入门(3-4)Spring Security 异常处理、异常传递和异常获取
  9. Oracle级联查询
  10. C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)