LingYanAspCoreFramework 2.0.1

LingYan_ASPFramework

介绍

适用于Asp.Net Core的后端框架

使用说明

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.

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 10 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