CodeSpirit(码灵)是一款基于 .NET 9 构建的革命性全栈低代码开发框架,通过智能代码生成引擎与AI深度协同,实现后端驱动式全栈开发范式。框架采用 Clean Architecture 分层设计,提供从界面生成、业务逻辑编排到系统运维的全生命周期支持。
统一的大语言模型集成解决方案
ILLMClient 提供同步和流式响应接口ILLMClientFactory 创建不同提供商的客户端革命性的零配置AI表单填充解决方案
[AiFormFill] 特性标记即可启用// 1. 在DTO上添加特性即可,无需编写任何控制器代码!
[AiFormFill(
TriggerField = "Topic",
MaxTokens = 1000,
EnableCache = true
)]
publicclassCreateQuestionDto
{
[DisplayName("主题")]
publicstring Topic { get; set; }
[DisplayName("题目内容")]
[Required]
publicstring Content { get; set; }
[DisplayName("选项A")]
publicstring OptionA { get; set; }
// 系统自动完成:
// ✅ 生成 POST /api/exam/questions/ai-fill 端点
// ✅ 路由自动推断
// ✅ 中间件拦截处理
// ✅ 前端UI自动增强(在Topic字段显示AI填充按钮)
}系统自动分析DTO结构,生成结构化提示词:
缓存LLM引擎AI填充服务AI填充中间件前端缓存LLM引擎AI填充服务AI填充中间件前端alt[缓存命中][缓存未命中]POST /api/exam/questions/ai-fill匹配注册的端点调用AI填充服务检查缓存返回缓存结果构建智能提示词调用LLM生成内容返回AI响应解析响应为DTO缓存结果返回填充后的数据返回JSON响应专为AI驱动的长时间处理任务设计的多步骤用户界面
OperationAttribute 自动生成完整的AI表单界面[HttpPost("ai/generate-async")]
[HeaderOperation("AI智能生成问卷", "aiForm",
Icon = "fa-solid fa-magic",
StatusApi = "/survey/api/survey/Surveys/ai/task-status",
PollingInterval = 2000,
MaxPollingTime = 300000,
FormTitle = "问卷生成配置",
StepsTitle = "AI生成进度",
LogTitle = "生成日志",
ResultTitle = "生成结果")]
[DisplayName("AI智能生成问卷")]
public async Task<ActionResult<ApiResponse<string>>> GenerateSurveyAsync(
[FromBody] GenerateSurveyRequest request)
{
var taskId = await _surveyAiGeneratorService.GenerateAsync(request);
return SuccessResponse(taskId);
}考试系统中的智能题目生成解决方案
基于反射的零前端代码CRUD界面生成
// 后端DTO定义
publicclassUserDto
{
[IgnoreColumn]
publiclong Id { get; set; }
[Display(Name = "用户名")]
[Required(ErrorMessage = "用户名不能为空")]
publicstring Username { get; set; }
[Display(Name = "邮箱")]
[DataType(DataType.EmailAddress)]
publicstring Email { get; set; }
[Display(Name = "头像")]
[AvatarColumn]
publicstring Avatar { get; set; }
[Display(Name = "状态")]
public UserStatus Status { get; set; }
[Display(Name = "创建时间")]
[DateColumn]
public DateTime CreatedAt { get; set; }
}
// 前端自动生成完整的用户管理界面!特性驱动的智能数据可视化解决方案
/// <summary>
/// 获取用户增长趋势图
/// </summary>
[HttpGet("usergrowth")]
[Display(Name = "用户增长趋势")]
[Chart("用户增长趋势", "展示用户随时间的增长趋势")]
[ChartType(ChartType.Line)]
[ChartData(dimensionField: "Date", metricFields: new[] { "UserCount" })]
public async Task<IActionResult> GetUserGrowthStatisticsAsync(
[FromQuery] DateTime[] dateRange)
{
var dailyGrowth = await _userService.GetUserGrowthAsync(startDate, endDate);
return this.AutoChartResult(dailyGrowth); // 自动生成图表配置!
}系统会自动分析数据特征并推荐最合适的图表类型:
统一的跨平台UI描述语言
一次定义,处处使用 - 实现真正的跨平台UI一致性开发
UDL EngineUDL规范定义UDL解析器渲染引擎AMIS渲染器MAUI渲染器API元数据Cards模板库企业级批量数据导入解决方案
清晰的架构分层设计
混合权限模型提供细粒度控制
通过特性标记即可实现权限控制:
[Authorize] - 需要身份认证[RequirePermission("User.Create")] - 需要特定权限完善的多租户数据隔离和资源管理
全链路操作追踪和数据变更记录
AuditableEntityBase<TKey> 自动记录创建/修改信息高级数据聚合和字段替换能力
fieldName#prefix-{value} - 添加前缀或后缀fieldName=/api/{value}.propertyPath - 从API获取数据替换fieldName=/api/{value}.name#{value} ({field}) - 保留原值并补充信息通过 [AggregateField] 特性标记字段,指定数据源和模板,系统自动处理数据聚合和字段替换
灵活的多数据库架构设计
DbContext三层架构
BaseDbContext (基础上下文,包含业务逻辑和实体配置)
├── MySqlDbContext (MySQL特定配置和优化)
└── SqlServerDbContext (SQL Server特定配置和优化)示例:考试系统
ExamDbContext (业务逻辑)
├── MySqlExamDbContext (MySQL特定)
│ └── Migrations/MySql/ (MySQL迁移文件)
└── SqlServerExamDbContext (SQL Server特定)
└── Migrations/SqlServer/ (SQL Server迁移文件)1. 配置文件切换
在 appsettings.json 或环境变量中配置:
{
"DatabaseType": "MySql", // 或 "SqlServer"
"ConnectionStrings": {
"exam-api": "Server=localhost;Port=3306;Database=exam-api;..."
}
}2. Aspire统一管理
在 CodeSpirit.AppHost 中统一配置数据库资源:
// 从配置读取数据库类型
var databaseType = builder.Configuration["DatabaseType"] ?? "MySql";
if (databaseType.Equals("MySql", StringComparison.OrdinalIgnoreCase))
{
// 配置MySQL容器
var mysql = builder.AddMySql("mysql", password: mysqlPassword, port: 3306)
.WithPhpMyAdmin()
.WithLifetime(ContainerLifetime.Persistent)
.WithDataVolume();
// 创建各个数据库
var examDb = mysql.AddDatabase("exam-api");
var identityDb = mysql.AddDatabase("identity-api");
}
elseif (databaseType.Equals("SqlServer", StringComparison.OrdinalIgnoreCase))
{
// 配置SQL Server容器
var sqlServer = builder.AddSqlServer("sqlserver", password: sqlServerPassword)
.WithLifetime(ContainerLifetime.Persistent)
.WithDataVolume();
// 创建各个数据库
var examDb = sqlServer.AddDatabase("exam-api");
var identityDb = sqlServer.AddDatabase("identity-api");
}3. 运行时自动选择
应用启动时自动检测并配置对应的DbContext:
public classExamApiConfiguration : BaseApiConfiguration
{
protected override void ConfigureDatabase(
IServiceCollection services,
IConfiguration configuration)
{
var databaseType = configuration["DatabaseType"] ?? "MySql";
var connectionString = configuration.GetConnectionString("exam-api");
if (databaseType.Equals("MySql", StringComparison.OrdinalIgnoreCase))
{
// 注册MySQL DbContext
services.AddDbContext<MySqlExamDbContext>(options =>
options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)));
services.AddDbContext<ExamDbContext>(options =>
options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)));
}
elseif (databaseType.Equals("SqlServer", StringComparison.OrdinalIgnoreCase))
{
// 注册SQL Server DbContext
services.AddDbContext<SqlServerExamDbContext>(options =>
options.UseSqlServer(connectionString));
services.AddDbContext<ExamDbContext>(options =>
options.UseSqlServer(connectionString));
}
}
}统一的迁移管理脚本
# 为MySQL添加迁移
.\Scripts\manage-multi-database-migrations.ps1 `
-ApiProject ExamApi `
-DatabaseType MySql `
-Action Add `
-MigrationName"AddQuestionBank"
# 为SQL Server添加迁移
.\Scripts\manage-multi-database-migrations.ps1 `
-ApiProject ExamApi `
-DatabaseType SqlServer `
-Action Add `
-MigrationName"AddQuestionBank"
# 查看迁移历史
.\Scripts\manage-multi-database-migrations.ps1 `
-ApiProject ExamApi `
-DatabaseType MySql `
-Action List
# 应用迁移
.\Scripts\manage-multi-database-migrations.ps1 `
-ApiProject ExamApi `
-DatabaseType MySql `
-Action UpdateMySQL优化配置
public classMySqlExamDbContext : ExamDbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// MySQL特定优化
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
// 字符串长度优化(MySQL索引长度限制)
foreach (var property in entity.GetProperties())
{
if (property.ClrType == typeof(string) && property.GetMaxLength() == null)
{
property.SetMaxLength(255); // MySQL索引默认长度
}
}
// 时间戳默认值
modelBuilder.Entity(entity.ClrType)
.Property<DateTime>("CreatedAt")
.HasDefaultValueSql("CURRENT_TIMESTAMP");
}
}
}SQL Server优化配置
public classSqlServerExamDbContext : ExamDbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// SQL Server特定优化
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
// 支持更大的字符串长度
foreach (var property in entity.GetProperties())
{
if (property.ClrType == typeof(string) && property.GetMaxLength() == null)
{
property.SetMaxLength(4000); // SQL Server nvarchar(max)
}
}
// 时间戳默认值
modelBuilder.Entity(entity.ClrType)
.Property<DateTime>("CreatedAt")
.HasDefaultValueSql("GETUTCDATE()");
}
}
}应用启动时的自动处理流程
public override async Task InitializeDatabaseAsync(WebApplication app)
{
usingvar scope = app.Services.CreateScope();
var services = scope.ServiceProvider;
var configuration = services.GetRequiredService<IConfiguration>();
var logger = services.GetRequiredService<ILogger<ExamApiConfiguration>>();
try
{
// 1. 应用数据库迁移(自动检测数据库类型)
await DatabaseMigrationHelper.ApplyDatabaseMigrationsAsync<
MySqlExamDbContext,
SqlServerExamDbContext>(
services,
configuration,
logger,
"ExamApi");
// 2. 初始化种子数据
var context = services.GetRequiredService<ExamDbContext>();
await context.InitializeDatabaseAsync();
logger.LogInformation("数据库初始化完成");
}
catch (Exception ex)
{
logger.LogError(ex, "数据库初始化失败: {Message}", ex.Message);
throw;
}
}API服务项目
组件项目
极简化的API项目创建和标准化配置
配置接口层次
IApiServiceConfiguration (配置接口)
↓
BaseApiConfiguration (基础抽象类)
↓
ExamApiConfiguration / IdentityApiConfiguration / ... (具体API配置)中间件插入点机制
请求流程:
↓
[PreAuthenticationMiddleware] ← 插入点1: 认证前中间件(如租户解析)
↓
Authentication & Authorization
↓
[PreControllerMiddleware] ← 插入点2: 控制器前中间件(如审计日志)
↓
Controller Mapping
↓
[PostControllerMiddleware] ← 插入点3: 自定义中间件
↓
响应返回1. 极简的Program.cs
// 整个API的启动代码仅需几行!
using CodeSpirit.ExamApi.Configuration;
using CodeSpirit.Shared.Startup;
var builder = WebApplication.CreateBuilder(args);
// 添加CodeSpirit API服务 - 一行完成所有基础配置
builder.AddCodeSpiritApi<ExamApiConfiguration>();
var app = builder.Build();
// 应用CodeSpirit API配置 - 一行完成所有中间件配置
await app.UseCodeSpiritApiAsync<ExamApiConfiguration>();
app.Run();2. API配置类
创建配置类继承 BaseApiConfiguration,重写关键方法:
ServiceName: 指定服务名称ConfigureServices: 配置数据库和业务服务ConfigurePreAuthenticationMiddleware: 添加认证前中间件(如多租户)ConfigurePreControllerMiddleware: 添加控制器前中间件(如审计)InitializeDatabaseAsync: 自动应用迁移和初始化种子数据统一启动框架自动完成的配置
零配置的批量服务注册
// 定义在 CodeSpirit.Core 中
public interface IScopedDependency { } // Scoped生命周期
public interface ITransientDependency { } // Transient生命周期
public interface ISingletonDependency { } // Singleton生命周期使用方式
IScopedDependency/ITransientDependency/ISingletonDependency)services.AddScoped<IService, Service>()services.AddScoped<IService, Service>()基于RabbitMQ的分布式事件系统
事件总线层次
应用层
↓
ITenantAwareEventBus (租户感知事件总线)
↓
IEventBus (基础事件总线)
↓
RabbitMQEventBus (RabbitMQ实现)
↓
RabbitMQ Message Broker使用方式
TenantAwareEventBase(租户感知)或普通类IEventBus 或 ITenantAwareEventBus 发布事件IEventHandler<TEvent> 接口处理事件租户感知机制
企业级多级缓存解决方案
请求 → L1缓存(内存) → L2缓存(Redis) → 数据源
↓ 命中返回 ↓ 命中回写L1 ↓ 写入L2和L1// 1. 注册服务
services.AddCodeSpiritCaching(configuration.GetSection("Caching"), "ServiceName");
// 2. 使用缓存
publicclassExampleService
{
privatereadonly ICacheService _cacheService;
public async Task<UserDto> GetUserAsync(long userId)
{
returnawait _cacheService.GetOrSetAsync(
$"user:{userId}",
async () => await _userRepository.GetByIdAsync(userId),
new CacheOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(30),
Level = CacheLevel.L1AndL2 // 两级缓存
});
}
}分布式定时任务调度解决方案
┌─────────────────┐
│ Web UI(AMIS) │
└─────────────────┘
↓
┌─────────────────────────────┐
│ TaskService/QueryService │
│ TaskExecutor/Scheduler │
└─────────────────────────────┘
↓
┌─────────────────────────────┐
│ Cache + Lock Provider │
└─────────────────────────────┘
↓
Redis (缓存+锁)// 1. 注册服务
builder.Services.AddCodeSpiritScheduledTasks(builder.Configuration, "ServiceName");
// 2. 配置文件定义任务
{
"ScheduledTasks": {
"Enabled": true,
"DefaultTimeout": "00:30:00",
"Tasks": [
{
"Id": "daily-cleanup",
"Name": "每日清理任务",
"Type": "Cron",
"CronExpression": "0 2 * * *",
"HandlerType": "YourApp.Tasks.DailyCleanupTaskHandler"
}
]
}
}
// 3. 创建任务处理器
publicclassDailyCleanupTaskHandler : ITaskHandler
{
public async Task ExecuteAsync(TaskExecutionContext context,
CancellationToken cancellationToken)
{
// 实现任务逻辑
await DoCleanupAsync(cancellationToken);
}
}丰富的分布式场景支持
1. 分布式锁 🔒
基于Redis的分布式锁实现,确保跨实例的资源互斥。
核心特性
使用方式
using 语句获取分布式锁,自动释放TryAcquire 尝试获取锁,避免阻塞2. 文件存储服务 📁
统一的文件管理接口,支持引用计数和生命周期管理。
核心特性
使用方式
文件引用生命周期
上传文件 → 临时文件(引用计数=0)
↓
确认引用 → 正式文件(引用计数=1)
↓
多次引用 → 引用计数累加
↓
取消引用 → 引用计数递减
↓
计数为0 → 自动删除(可配置延迟)3. 图片处理服务 🖼️
自动图片优化和缩略图生成。
核心特性
使用方式
上传时自动处理,支持配置:
4. 时间处理机制 ⏰
统一的UTC时间处理,避免时区问题。
核心特性
使用方式
5. PDF生成服务 📄
模板化的PDF文档生成。
核心特性
统一的服务编排和管理
var builder = DistributedApplication.CreateBuilder(args);
// 基础设施服务
var redis = builder.AddRedis("redis");
var rabbitmq = builder.AddRabbitMQ("rabbitmq");
var sqlserver = builder.AddSqlServer("sqlserver");
var elasticsearch = builder.AddElasticsearch("elasticsearch");
// API服务
var identityApi = builder.AddProject<Projects.CodeSpirit_IdentityApi>("identity-api")
.WithReference(identityDb)
.WithReference(redis)
.WithReference(rabbitmq);
var examApi = builder.AddProject<Projects.CodeSpirit_ExamApi>("exam-api")
.WithReference(examDb)
.WithReference(redis)
.WithReference(identityApi);
builder.Build().Run();Docker + Kubernetes 原生支持
统一的配置管理解决方案
AI辅助设计
概念场景:
"灵儿,给用户表加个生日字段,要日历组件,在列表页显示为年龄"
AI助手即刻完成:
代码生成架构验证代码分析器AI引擎开发者代码生成架构验证代码分析器AI引擎开发者输入自然语言需求解析语义意图检查兼容性返回约束条件生成候选方案返回可执行代码维度 | CodeSpirit | 传统低代码平台 |
|---|---|---|
架构开放性 | ✅ 全代码开放 | ❌ 黑箱生成 |
性能表现 | ✅ 原生代码级性能 | ⚠️ 解释执行性能损耗 |
定制能力 | ✅ 底层架构可定制 | ❌ 有限扩展 |
AI集成 | ✅ 深度集成LLM | ⚠️ 有限AI能力 |
技术栈 | ✅ 最新.NET生态 | ⚠️ 私有技术栈 |
部署模式 | ✅ 混合云/本地部署 | ❌ SaaS绑定 |
传统模式 | CodeSpirit模式 | 效率提升 |
|---|---|---|
前后端联调3小时 | 自动生成联调完成 | 8x |
表单校验开发0.5天 | 声明式配置5分钟 | 12x |
权限系统集成2天 | 开箱即用 + 策略扩展 | ∞ |
AI功能开发1周 | 特性标记即可 | 20x |
CodeSpirit.AppHost 设为启动项目CodeSpirit 是一款革命性的全栈低代码开发框架,通过以下创新实现了开发效率的质的飞跃:
让全栈开发回归工程本质,让复杂系统开发回归优雅!
CodeSpirit - 智能编码,灵动创新! 🎉