其他
.NET Core AA.FrameWork应用框架介绍
(给DotNet加星标,提升.Net技能)
转自:成天 cnblogs.com/chengtian/p/11684860.html
AA.FrameWork 是基于.NET core流行的开源类库创建的基础应用框架。
框架代码图如:
源代码github地址:https://github.com/ChengLab/AAFrameWork
nuget管理中,搜索前缀名称 AA 即可如图
Nuget Packages
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 = userInfoRepository.Get(1);
user.GmtModified = DateTime.Now;
var result = userInfoRepository.Update(user);
支持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.ServiceBus 用法
生产者(事件和命令两种类型)
实例化bus
//事件
IBusControl busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)
.BuildEventProducer();
//命令
ISendEndpoint busControl = ServiceBusManager.Instance.UseRabbitMq(rabbitMqUri, rabbitMqUserName, rabbitMqPassword)
.BuildCommandProducer(queueName);
[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...
}
}
在程序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框架的应用实例,有问题可以联系我,一起交流和成长
推荐阅读
(点击标题可跳转阅读)
看完本文有收获?请转发分享给更多人
关注「DotNet」加星标,提升.Net技能
好文章,我在看❤️