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

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

框架代码图如:

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

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

Nuget Packages

Package nuget description
AA.Dapper nuget 基于dapper,Dapper-FluentMap 开发 , 支持工作单元、仓储模式和原生dapper的操作
AA.Log4Net nuget 基于Log4net开发,提供常用的日志操作类
AA.FrameWork nuget 基础框架
AA.Redis nuget 基于StackExchange.Redis开发,提供各种redis操作和基于redis的分布式锁
AA.AutoMapper nuget 基于AutoMapper开发,对象映射
AA.ServiceBus nuget 基于MassTransit开发的服务总线 ;很方便的应用在event bus 和 publish/subscribe 场景
AA.AspNetCore nuget aspnetcore常用类集合

AA.Dapper用法

实体映射配置

使用DommelEntityMap<TEntity>类映射属性名称。创建一个派生类,在构造函数中设置Map方法,可指定某个属性映射到数据库列名

  1. public class UserInfoMap : DommelEntityMap<UserInfo>
  2. {
  3. public UserInfoMap()
  4. {
  5. ToTable("Sys_UserInfo");//映射具体的表名
  6. Map(p => p.SysNo).IsKey();//指定主键 ,IsIdentity是否自增
  7. Map(p=>p.GmtCreate).ToColumn("GmtCreateDate"); //属性名和数据库列名 可以不同
    Map(p=>p.LastLoginDate).Ignore();//一些计算属性,可以忽略不需要跟数据库列进行映射
  8. }
  9. }

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

  1. public static void InitMapCfgs()
  2. {
  3. var fluentMapconfig = new List<Action<FluentMapConfiguration>>();
  4. fluentMapconfig.Add(cfg =>
  5. {
  6. cfg.AddMap(new UserInfoMap());
  7. });
  8. MapConfiguration.Init(fluentMapconfig);
  9. }

开始使用AA.Dapper

使用DapperContext设置数据库连接和数据库类型是sqlserver还是mysql
  1. public class AADapperContext : DapperContext
  2. {
  3. public AADapperContext() : base(new NameValueCollection()
  4. {
  5. ["aa.dataSource.AaCenter.connectionString"] = "Data Source =.; Initial Catalog = AaCenter;User ID = sa; Password = 123;",
  6. ["aa.dataSource.AaCenter.provider"] = "SqlServer"
  7. })
  8. { }
  9. }
仓储包含了大部分的操作,同时支持Async操作
  1. IDapperRepository<UserInfo> userInfoRepository = new DapperRepository<UserInfo>();
插入实体
  1. var user = new UserInfo()
  2. {
  3. UserName = "chengTian",
  4. RealName = "成天",
  5. GmtCreate = DateTime.Now,
  6. GmtModified = DateTime.Now
  7. };
  8. var result = userInfoRepository.Insert(user);
修改实体
  1. var user = userInfoRepository.Get();
  2. user.GmtModified = DateTime.Now;
  3. var result = userInfoRepository.Update(user);
获取实体
  1. var user = userInfoRepository.Get();//By 主键
  2. var users = userInfoRepository.GetAll();//所有
  3. var users = userInfoRepository.Select(p => p.UserName == "chengTian");//谓词
删除实体
  1. var user = userInfoRepository.Get();
  2. var result = userInfoRepository.Delete(user);
支持Dapper原生操作

操作基本的封装都是单表的操作,可以满足一部分业务开发,有些业务场景编写sql还是比较合适的比如报表和一些复杂的查询,推荐使用原生dapper的操作

  1. public class UserInfoRepository : DapperRepository<UserInfo>, IUserInfoRepository
  2. {
  3. private readonly IDapperContext _dapperContext;
  4. public UserInfoRepository(IDapperContext context)
  5. {
  6. _dapperContext = context;
  7. }
  8.  
  9. public IEnumerable<UserInfo> QueryAll()
  10. {
  11. var result = _dapperContext.DataBase.Query<UserInfo>("SELECT * from [Sys_UserInfo]");//实例
  12. return result;
  13. }
  14. }

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

  1. //事件
  2. IBusControl busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)
  3. .BuildEventProducer();
  4. //命令
  5. ISendEndpoint busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)
  6. .BuildCommandProducer(queueName);

实例化bus之后可以使用发送和发布两个方法

  1. //命令
  2. TaskUtil.Await(busControl.Send<SubmitOrder>(new
  3. {
  4. Id =
  5. }));
  6. //事件
  7. TaskUtil.Await(busControl.Publish<OrderSubmitted>(new
  8. {
  9. Id =
  10. }));
消费者
  1. [Fact]
  2. public void TestConsumer()
  3. {
  4. Log4NetLogger.Use("Log4Net/log4net.config");
  5. string rabbitMqUri = "rabbitmq://localhost:5672";
  6. string rabbitMqUserName = "";
  7. string rabbitMqPassword = "";
  8. string queueName = "order.queue";
  9.  
  10. var busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)
  11. .RegisterConsumer<SubmitOrderCommandConsumer>(queueName)//注册命令消费者
  12. .RegisterConsumer<OrderSubmittedEventConsumer>(null)//注册事件消费者
  13. .Build();
  14. busControl.Start();
  15.  
  16. }

定义消费者需要实现接口IConsumer

  1. public class OrderSubmittedEventConsumer : IConsumer<OrderSubmitted>
  2. {
  3. public async Task Consume(ConsumeContext<OrderSubmitted> context)
  4. {
  5. var @event = context.Message;
  6.  
  7. var result = $"OrderSubmittedEvent {@event.Id.ToString()}";
  8. ILog log = Logger.Get(typeof(OrderSubmittedEventConsumer));
  9. log.Debug(result);
  10. //do somethings...
  11. }
  12. }
  13.  
  14. public class SubmitOrderCommandConsumer : IConsumer<SubmitOrder>
  15. {
  16. public async Task Consume(ConsumeContext<SubmitOrder> context)
  17. {
  18. var command = context.Message;
  19.  
  20. var result = $"CreateFooCommand {command.Id.ToString()}";
  21. ILog log = Logger.Get(typeof(SubmitOrderCommandConsumer));
  22. log.Debug(result);
  23. //do somethings...
  24. }
  25. }

AA.AutoMapper用法

实现IMapperConfiguration接口,创建映射规则配置
  1. public class WebMapperConfigurations : IMapperConfiguration
  2. {
  3. public int Order { get { return ; } }
  4.  
  5. public Action<IMapperConfigurationExpression> GetConfiguration()
  6. {
  7. Action<IMapperConfigurationExpression> action = cfg =>
  8. {
  9. cfg.CreateMap<UserVm, UserInput>();
  10. };
  11. return action;
  12. }
  13. }
在程序startup调用配置
  1. var mapperConfig = new WebMapperConfigurations();
  2. AutoMapperConfiguration.Init(new List<Action<IMapperConfigurationExpression>> { mapperConfig.GetConfiguration() });
  3. ObjectMapping.ObjectMapManager.ObjectMapper = new AutoMapperObjectMapper();
利用扩展方法MapTo执行映射
  1. [Fact]
  2. public void TestMap()
  3. {
  4. //init
  5. Init();
  6. UserVm userVm = new UserVm { Id = , Name = "成天" ,Remark="微信公众号:dotNet知音"};
  7. var userDto = userVm.MapTo<UserInput>();
  8. //var userDto2 = userVm.MapTo<UserVm,UserInput>();
  9.  
  10. }

后面也会提供基于AA框架的应用实例,有问题可以联系我,一起交流和成长。

.Net Core AA.FrameWork应用框架介绍的更多相关文章

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

    系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 近些年一直浸淫在 .Net 平台做企业应用开 ...

  2. .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持

    系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 最近有空就优化 Jimu (一个基于.Net ...

  3. Net Core 分布式微服务框架

    Jimu : .Net Core 分布式微服务框架介绍 https://www.cnblogs.com/grissom007/p/9291345.html 一.前言 近些年一直浸淫在 .Net 平台做 ...

  4. 四种方法获取可执行程序的文件路径(.NET Core / .NET Framework)

    原文:四种方法获取可执行程序的文件路径(.NET Core / .NET Framework) 本文介绍四种不同的获取可执行程序文件路径的方法.适用于 .NET Core 以及 .NET Framew ...

  5. Core Foundation框架介绍

    Core Foundation框架介绍 **参考网址: ARC下OC对象和CF对象之间的桥接 Core Foundation框架介绍 Core Foundation框架 Core Foundation ...

  6. Entity Framework 实体框架的形成之旅--几种数据库操作的代码介绍(9)

    本篇主要对常规数据操作的处理和实体框架的处理代码进行对比,以便更容易学习理解实体框架里面,对各种数据库处理技巧,本篇介绍几种数据库操作的代码,包括写入中间表操作.联合中间表获取对象集合.递归操作.设置 ...

  7. UiAutomator自动化测试框架介绍

    UiAutomator自动化测试框架介绍 环境搭建 1         必要条件 1.1       JDK 1.2       SDK(API高于15) 1.3       Eclipse 2    ...

  8. iOS Core Telephony Framework

    Core Telephony Framework(核心通讯框架) 概述: 这个库的前缀为CT(Core Telephony),主要用来获得用户通讯相关信息,我们可以使用这些信息来定义外部接口以便自己使 ...

  9. UIKit,Core Data , Core Graphics, Core Animation,和OpenGLES框架

    iOS的主要框架介绍   框架是一个目录,这个目录包含了共享库,访问共享库里代码的头文件,和其它的图片和声音的资源文件.一个共享库定义的方法或函数可以被应用程序调用. IOS提供了很多你可以在应用程序 ...

随机推荐

  1. 使用dig/nslookup命令查看dns解析详情

    dig-DNS lookup utility 当域名出现访问故障时,可通过域名解析来判断是否有错误的解析导致的问题. 可以看到有请求段和应答段,最后解析出的A记录有两条 dig命令做迭代查询 dig ...

  2. Tomcat运行机制

    Tomcat其实就是一个servlet的容器,因此,它在运行过程中,首先要做以下事情: 1.实现servlet api规范.如request.response.cookie.session等,容器对其 ...

  3. 本地代码上传github失败常见错误

    1.上传失败 解决办法如下: 可以通过如下命令进行github与本地代码合并: git pull --rebase origin master 重新执行上传命令: git push -u origin ...

  4. java生成二维码/java解析二维码

    二维码的优缺点 优点:1. 高密度编码,信息容量大:2.编码范围广:3.容错能力强:4.译码可靠性高:5.可引入加密措施:6.成本低,易制作,持久耐用. 缺点:1.二维码技术成为手机病毒.钓鱼网站传播 ...

  5. Docker-Compose简介与Ubuntu Server 上安装Compose

    Compose简介 Compose是Docker官方的开源项目,负责对Docker容器集群的快速编排. Compose是定义和运行多个Docker容器的应用. 举例来说: 一个项目除了Tomcat容器 ...

  6. ThreadLocal的认知与见解

    ThreadLocal:提高一个线程的局部变量,访问某个线程拥有自己局部变量(很难理解.看看下面这句话,顺便再讲个例子). 当使用ThreadLocal维护变量时,ThreadLocal为每一个使用该 ...

  7. python常用内建模块——datetime

    datetime是python处理日期和时间的标准库. 获取当前日期和时间 >>>from datetime import datetime >>>now = da ...

  8. 关于设置tomcat端口为80的事

    今天有人要求tomcat服务器的访问地址不能带端口访问, 也就是说只能用80端口访问网站. 那么问题来了, Ubuntu系统禁止root用户以外的用户访问1024以下的商品, 因此tomcat 默认为 ...

  9. web性能优化实践

    一.SQL查询优化 1.循环中有多次查询sql,改为在循环外一次查询后再处理 2.循环多次插入,改为组装好数据后批量插入 3.梳理业务逻辑能一次查完的,绝不分多次查 4.索引用起来 5.分页查询 二. ...

  10. 55 (OC)* 图片圆角处理

    iOS图片设置圆角性能优化   问题 圆角虽好,但如果使用不当,它就是你的帧数杀手,特别当它出现在滚动列表的时候.下面来看圆角如何毁掉你的流畅度的. 实测 layer.cornerRadius 我创建 ...