using FreeSql; using FreeSql.Aop; using F9WebAiTest.Application.Interfaces.Repositories.SYS.Departments; using F9WebAiTest.Application.Interfaces.Repositories.SYS.RBAC.Menus; using F9WebAiTest.Application.Interfaces.Repositories.SYS.RBAC.Roles; using F9WebAiTest.Application.Interfaces.Repositories.SYS.RBAC.Users; using F9WebAiTest.Application.Interfaces.Repositories.SYS.WorkTypes; using F9WebAiTest.Application.Interfaces.Repositories.SYS.Registries; using F9WebAiTest.Application.Interfaces.Repositories.SYS.YuanliaoZhuangkous; using F9WebAiTest.Application.Interfaces.Repositories.SYS.Gongyingshangs; using F9WebAiTest.Application.Interfaces.Repositories.SYS.WuziMulus; using F9WebAiTest.Application.Interfaces.Repositories.SYS.Zq; using F9WebAiTest.Application.Interfaces.Security; using F9WebAiTest.Application.Interfaces.SnowflakeID; using F9WebAiTest.Application.Interfaces.UOW; using F9WebAiTest.Domain.Common; using F9WebAiTest.Domain.Entities; using F9WebAiTest.Domain.Interfaces.SYS.Departments; using F9WebAiTest.Domain.Interfaces.SYS.RBAC.Menus; using F9WebAiTest.Domain.Interfaces.SYS.RBAC.Permissions; using F9WebAiTest.Domain.Interfaces.SYS.RBAC.Roles; using F9WebAiTest.Domain.Interfaces.SYS.RBAC.Users; using F9WebAiTest.Domain.Interfaces.SYS.WorkTypes; using F9WebAiTest.Domain.Interfaces.SYS.Registries; using F9WebAiTest.Domain.Interfaces.SYS.YuanliaoZhuangkous; using F9WebAiTest.Domain.Interfaces.SYS.Gongyingshangs; using F9WebAiTest.Domain.Interfaces.SYS.WuziMulus; using F9WebAiTest.Domain.Interfaces.SYS.Zq; using F9WebAiTest.Infrastructure.FreeSqls.Persistence; using F9WebAiTest.Infrastructure.FreeSqls.Repositories.SYS.Departments; using F9WebAiTest.Infrastructure.FreeSqls.Repositories.SYS.RBAC.Menus; using F9WebAiTest.Infrastructure.FreeSqls.Repositories.SYS.RBAC.Permissions; using F9WebAiTest.Infrastructure.FreeSqls.Repositories.SYS.RBAC.Roles; using F9WebAiTest.Infrastructure.FreeSqls.Repositories.SYS.RBAC.Users; using F9WebAiTest.Infrastructure.FreeSqls.Repositories.SYS.WorkTypes; using F9WebAiTest.Infrastructure.FreeSqls.Repositories.SYS.Registries; using F9WebAiTest.Infrastructure.FreeSqls.Repositories.SYS.YuanliaoZhuangkous; using F9WebAiTest.Infrastructure.FreeSqls.Repositories.SYS.Gongyingshangs; using F9WebAiTest.Infrastructure.FreeSqls.Repositories.SYS.WuziMulus; using F9WebAiTest.Infrastructure.FreeSqls.Repositories.SYS.Zq; using F9WebAiTest.Infrastructure.InterfaceImplements.Security; using F9WebAiTest.Infrastructure.InterfaceImplements.SnowflakeID; using F9WebAiTest.Infrastructure.Repositories; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace F9WebAiTest.Infrastructure; public static class DependencyInjection { public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration) { // 创建 FreeSql 实例(SQLite),关闭自动同步结构(只建新表,不修改旧库) var connStr = configuration.GetConnectionString("Default"); var fsql = new FreeSqlBuilder() .UseConnectionString(DataType.Sqlite, connStr) .UseAutoSyncStructure(false) .Build(); // 软删除全局过滤器:自动应用到新旧两套实体基类 fsql.GlobalFilter.Apply("软删除", a => a.IsDeleted == false); fsql.GlobalFilter.Apply("软删除", a => a.IsDeleted == false); // 枚举统一映射为 int(与旧库 INTEGER 存储保持一致) fsql.Aop.ConfigEntityProperty += (_, e) => { if (e.Property.PropertyType.IsEnum) e.ModifyResult.MapType = typeof(int); }; services.AddSingleton(fsql); services.AddScoped(typeof(IRepository<>), typeof(Repository<>)); // ==================== F9 风格 RBAC(DDD + CQRS)依赖注册 ==================== // 雪花 ID(有状态,单例) services.AddSingleton(); // 密码哈希 services.AddScoped(); // 工作单元(事务) services.AddScoped(); // 写仓储(Domain 接口) services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); // 读仓储(Application 接口) services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); return services; } }