LingYanAspCoreFramework 8.0.1
LingYanASPFramework
框架简介
交流学习
QQ群:571927325,微信:13028792031
关于LingYanAspCoreFramework
该框架由.NET领域开发人员-司晨老师-开发,适应于C#系列各种方向,采用DDD领域驱动思想,特性自动注入服务替代手写注入服务,模块化基类保证每一层都可以进行自定义扩展的服务注入和服务初始化,针对EFCore封装常规使用的工作单元与仓储及分页功能,自研基于EFCore的动态分库分模式分表框架以适应大数据场景、多租户场景。
官网:灵燕空间官网
B站:灵燕空间B站
博客:灵燕空间博客
使用说明
1、模块化注入,模块内类应当继承BaseModule,此抽象类有三种形式 BaseModule<IServiceCollection, IServiceProvider>类型
public class RESTApiModule : BaseModule<IServiceCollection, IServiceProvider>
{
//此属性为模块注入加载顺序可不重写让其默认即可,如有特殊需求可重写规范加载顺序
public override int PageIndex { get; set; } = 5;
//此方法可注入各种...
public override void ARegisterModule(IServiceCollection services)
{
throw new NotImplementedException();
}
//此方法可初始化各种...
public override void BInitializationModule(IServiceProvider provider)
{
throw new NotImplementedException();
}
}
BaseModule<WebApplicationBuilder, WebApplication>类型
public class RESTApiModule : BaseModule<WebApplicationBuilder, WebApplication>
{
//此属性为模块注入加载顺序可不重写让其默认即可,如有特殊需求可重写规范加载顺序
public override int PageIndex { get; set; } = 5;
//此方法可注入各种...
public override void ARegisterModule(WebApplicationBuilder services)
{
}
//此方法可初始化各种...
public override void BInitializationModule(WebApplication provider)
{
}
}
BaseModule<IServiceCollection, IConfigurationManager, IServiceProvider>类型
public class RESTApiModule : BaseModule<IServiceCollection, IConfigurationManager, IServiceProvider>
{
//此属性为模块注入加载顺序可不重写让其默认即可,如有特殊需求可重写规范加载顺序
public override int PageIndex { get; set; } = 5;
//此方法可注入各种...
public override void ARegisterModule(IServiceCollection services, IConfigurationManager configuration)
{
throw new NotImplementedException();
}
//此方法可初始化各种...
public override void BInitializationModule(IServiceProvider provider)
{
throw new NotImplementedException();
}
}
2、主程序扩展
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
//此扩展方法自动注入各模块及各模块方法
builder.AppRegisterProjectModule();
var app = builder.Build();
//此扩展方法自动初始化各模块及各模块初始化方法
app.AppInitializationProjectModule();
app.Run();
}
}
3、实体基类BaseEntity,内置三个属性
public class BaseEntity
{
public long Id { get; set; }
public bool IsDeleted { get; set; }
public long CreateTimeStamp { get; set; }
public BaseEntity()
{
Id = YitIdHelper.NextId();
IsDeleted = false;
CreateTimeStamp = new DateTimeOffset(DateTime.Now).ToUnixTimeMilliseconds();
}
}
4、仓储与工作单元自动注入,可在任何地方引入,例如在Domain的Manager当中引入,Manager想自动注入只需打上特性 [LYManager]
[LYManager]
public class UserManager
{
public UserManager(IRepository<UserEntity> userRepo,
IRepository<TeamEntity> userTeamRepo,
IRepository<TeamMemberEntity> userTeamMemborRepo,
IRepository<UserFileEntity> userFileRepo)
{
UserRepo = userRepo;
TeamRepo = userTeamRepo;
TeamMemborRepo = userTeamMemborRepo;
UserFileRepo = userFileRepo;
}
//仓储引入
public IRepository<UserEntity> UserRepo { get; }
public IRepository<TeamEntity> TeamRepo { get; }
public IRepository<TeamMemberEntity> TeamMemborRepo { get; }
public IRepository<UserFileEntity> UserFileRepo { get; }
public async Task<UserEntity> Queryuser(long userId)
{
return await this.UserRepo.GetFirstOrDefaultAsync(predicate: p => p.Id == userId && p.IsDeleted == false);
}
public async Task<UserEntity> Queryuser(string userPhone)
{
return await this.UserRepo.GetFirstOrDefaultAsync(predicate: p => p.UserPhone == userPhone && p.IsDeleted == false);
}
}
5、数据库上下文自动注入只需打赏特性 [LYDbContext("Default")],中间Default是配置文件当中的json对应的连接字符串,json配置位于LingYanSetting.json 6、如果在数据库上下文的重写方法当中想引用连接字符串可以用
LingYanRuntimeManager.MysqlConfigModel.Others["Default"]
7、过滤器注入标记特性 [LYFilter] 8、类似PermissionHandle注入的话,标记特性[LYTService(typeof(IAuthorizationHandler), ServiceLifetime.Singleton)] 9、服务注入的话,标记特性 [LYTService(typeof(IUserService))],并且需要给加上接口类型,否则防止多次注入查找目标不明确
[LYTService(typeof(IUserService))]
public class UserService : IUserService
10、控制器的鉴权于授权特性标记
[Route("api/[controller]/[action]")]
//跨域策略使用
[EnableCors(LingYanRuntimeManager.CrossPolicy)]
//授权策略
[Authorize(Policy = LingYanRuntimeManager.EmpowerPolicy)]
[ApiController]
public class BaseController : ControllerBase
{
}
11、动态路由应该打上特性 [LYDynamicRoute],或者继承DynamicRouteBase也行
配置文件详解
{
//跨域前缀
"CrossDomains": [
"http://*:7001"
],
//启动端口
"ListeningPorts": [
"http://*:7001"
],
//动态路由配置
"HttpMethodConfigure": [
{
"MethodKey": "Get",
"MethodVal": [ "GET", "QUERY" ]
},
{
"MethodKey": "Post",
"MethodVal": [ "CREATE", "SAVE", "INSERT", "ADD" ]
},
{
"MethodKey": "Put",
"MethodVal": [ "UPDATE", "EDIT" ]
},
{
"MethodKey": "Delete",
"MethodVal": [ "Delete", "REMOVE" ]
}
],
//MYSQL模型
"MysqlConfigModel": {
"SysTenant": "",
"SysTenantTemplate": "",
"Others": {
"Default": "server=192.168.148.131;port=3306;database=test;user=laoda;password=12345678;AllowLoadLocalInfile=true;"
}
},
"RedisCofigModel": {
"Pattern": "Single",
// 单机模式
"Single": "192.168.148.131:6379,defaultDatabase=7,password=123456,prefix=dcc",
//哨兵模式
"SentinelModel": {
"Master": "longyumaster,password=,prefix=",
//下面只写IP地址即可中间以*号分割
"Slave": "192.168.148.131:6379"
},
//集群模式中间以*号分割
"Cluster": "192.168.148.131:6379,defaultDatabase=1,password="
},
//JWT鉴权模型
"JwtModel": {
"Issuer": "LingYanAuthor",
"Audience": "LingYanAudience",
"Expres": 7,
"SecretKey": "idIUAJGNJAHGAMVNFAJKGHFNAMNVXCMJiafhioghagnjzhgOhgdsjlgnfmdnabNjGVDAGQGJEGBV"
},
//分布式雪花ID
"IdGeneratorOptionConfigModel": {
"WorkerId": 1,
"WorkerIdBitLength": 10,
"SeqBitLength": 10,
"BaseTime": " 2024.1.1"
},
//云点播与云直播,rtmp流配置,此处应该对应代理的地址
"CloudVodLiveConfigModel": {
"VodServer": "rtmp://192.168.148.131:8000/vod/",
"LiveServer": "rtmp://192.168.148.131:8000/live/"
},
//表单数量限制与请求体大小限制(1024*1024*SizeLimit)所以单位是MB开始
"SysFormOption": {
"CountLimit": 100000,
"SizeLimit": 1024
},
//公共配置
"CommonConfigModel": {
"FFMpegWinConfig": "Envs/FFMpegWinConfig",
"FFMpegLinuxConfig": "Envs/FFMpegLinuxConfig",
"NlogConfig": "Envs/Configurations/NLog.config",
"IPAddressHost": "http://192.168.0.111:7000",
"AuthorizedFolderHost": "AuthorizedFolderHost",
"UnauthorizedFolderHost": "UnauthorizedFolderHost"
},
//动态路由前缀
"DynamicHttpRoutePrefix": "dccmicro",
//多租户路由前缀
"TenantRoutePrefix": "/api/tenant",
"ShowSwaggerUI": true
}
No packages depend on LingYanAspCoreFramework.
.NET 8.0
- AlibabaCloud.SDK.Dysmsapi20170525 (>= 3.1.3)
- CSRedisCore (>= 3.8.804)
- Essensoft.Paylink.Alipay (>= 4.1.9)
- Essensoft.Paylink.Security (>= 4.1.9)
- Essensoft.Paylink.WeChatPay (>= 4.1.9)
- Microsoft.AspNetCore.Authentication.JwtBearer (>= 8.0.15)
- Microsoft.AspNetCore.Mvc.NewtonsoftJson (>= 8.0.15)
- Microsoft.EntityFrameworkCore.AutoHistory (>= 6.0.0)
- Microsoft.EntityFrameworkCore.Design (>= 8.0.15)
- Microsoft.EntityFrameworkCore.SqlServer (>= 8.0.15)
- Microsoft.EntityFrameworkCore.Sqlite (>= 8.0.15)
- Microsoft.Extensions.DependencyModel (>= 8.0.2)
- Microsoft.IdentityModel.JsonWebTokens (>= 8.8.0)
- NLog.Database (>= 5.4.0)
- NLog.Web.AspNetCore (>= 5.4.0)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 8.0.11)
- Oracle.EntityFrameworkCore (>= 8.23.80)
- Polly (>= 8.5.2)
- Pomelo.EntityFrameworkCore.MySql (>= 8.0.3)
- Portable.BouncyCastle (>= 1.9.0)
- SkiaSharp.NativeAssets.Linux.NoDependencies (>= 3.116.1)
- SkiaSharp.QrCode (>= 0.7.0)
- Swashbuckle.AspNetCore.SwaggerGen (>= 7.3.2)
- Swashbuckle.AspNetCore.SwaggerUI (>= 7.3.2)
- TencentCloudSDK (>= 3.0.1223)
- Yitter.IdGenerator (>= 1.0.15)
- ZXing.Net (>= 0.16.10)
| Version | Downloads | Last updated |
|---|---|---|
| 8.0.7 | 18 | 5/7/2025 |
| 8.0.6 | 6 | 5/7/2025 |
| 8.0.5 | 10 | 4/19/2025 |
| 8.0.4 | 4 | 4/19/2025 |
| 8.0.3 | 7 | 4/19/2025 |
| 8.0.2 | 7 | 4/19/2025 |
| 8.0.1 | 9 | 4/19/2025 |
| 8.0.0 | 7 | 4/16/2025 |
| 3.0.0 | 6 | 4/16/2025 |
| 2.0.8 | 14 | 1/17/2025 |
| 2.0.7 | 9 | 1/16/2025 |
| 2.0.6 | 7 | 1/16/2025 |
| 2.0.5 | 7 | 1/15/2025 |
| 2.0.4 | 7 | 1/15/2025 |
| 2.0.3 | 9 | 1/15/2025 |
| 2.0.2 | 7 | 1/15/2025 |
| 2.0.1 | 7 | 1/15/2025 |
| 2.0.0 | 10 | 1/15/2025 |
| 1.1.9 | 11 | 12/9/2024 |
| 1.1.8 | 7 | 12/9/2024 |
| 1.1.7 | 14 | 10/29/2024 |
| 1.1.6 | 7 | 10/29/2024 |
| 1.1.5 | 7 | 10/29/2024 |
| 1.1.4 | 7 | 10/29/2024 |
| 1.1.3 | 9 | 9/12/2024 |
| 1.1.2 | 7 | 9/9/2024 |
| 1.1.1 | 7 | 9/5/2024 |