.Net Core AA.FrameWork应用框架介绍
2019-10-16 13:00
1126 查看
开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架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方法,可指定某个属性映射到数据库列名
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() { //init Init(); UserVm userVm = new UserVm { Id = 1, Name = "成天" ,Remark="微信公众号:dotNet知音"}; var userDto = userVm.MapTo<UserInput>(); //var userDto2 = userVm.MapTo<UserVm,UserInput>(); }
后面也会提供基于AA框架的应用实例,有问题可以联系我,一起交流和成长。
相关文章推荐
- cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(一)
- Maticsoft.Framework for Asp.Net框架应用实例(一)
- RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍
- cWeb开发框架,基于asp.net的cWeb应用开发平台介绍(二)
- RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍
- ASP.NET Core应用中与第三方IoC/DI框架的整合
- RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍
- 开源框架系列:.NET Enterprise CMS Framework --- RapidWebDev 基于XML配置的UI介绍
- RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍
- [Programming Entity Framework] 第1章 ADO.NET实体框架介绍(一)
- .net core Entity Framework Core Code First 框架 分层开发
- ASP.NET Core身份认证服务框架IdentityServer4(2)-整体介绍
- 工作流程组件介绍 ━ RDIFramework.NET ━ .NET快速信息化系统开发框架
- 使用Angular 4、Bootstrap 4、TypeScript和ASP.NET Core开发的Apworks框架案例应用
- [Programming Entity Framework] 第1章 ADO.NET实体框架介绍(二)
- ASP.NET Core模块化前后端分离快速开发框架介绍之1、开篇
- RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍
- RDIFramework.NET(.NET快速信息化系统开发框架) Web版介绍
- 如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?
- ASP.NET Core模块化前后端分离快速开发框架介绍之3、数据访问模块介绍