运行时 Schema 渲染
一份 *.schema.json 描述实体、页面与菜单,框架在运行时直接渲染成能用的页面,并做非破坏性建表。不生成任何 .razor。
Known 是基于 Blazor 的元数据驱动全栈框架:120+ 组件、运行时 Schema 渲染、审批流引擎、 报表、系统管理与权限、整包插件懒加载与内建智能体,同一份 .razor 跑在 Server、WebAssembly 和桌面宿主上。 默认路径下你不写一行前端代码,也不生成任何页面文件。
{
"key": "order",
"name": "订单",
"fields": [
{ "name": "code", "label": "单号", "type": "string" },
{ "name": "amount", "label": "金额", "type": "decimal",
"sum": true },
{ "name": "customer", "label": "客户", "type": "ref",
"ref": "customer" }
],
"menu": { "parent": "business", "icon": "file-text" }
}<Table TItem="Order" Items="rows" Selectable="true">
<Column TItem="Order" Title="单号" Field="Code" />
<Column TItem="Order" Title="客户" Field="Customer" />
<Column TItem="Order" Title="金额" Field="Amount"
Align="right" />
<RowActions>
<Button Kind="link" Text="编辑"
OnClick="() => Edit(context)" />
</RowActions>
</Table>[Service]
public class MyAgent : IAgentService
{
// 框架只定契约,不绑厂商、不碰密钥
public async Task<AgentReply> AskAsync(
AgentRequest req, CancellationToken ct)
{
var text = await llm.CompleteAsync(req.Messages, ct);
return AgentReply.Text(text);
}
}增删改查、权限菜单、主题国际化、弹窗提示这些每套后台都要重写一遍的东西,框架里已经是现成的。
一份 *.schema.json 描述实体、页面与菜单,框架在运行时直接渲染成能用的页面,并做非破坏性建表。不生成任何 .razor。
顶栏自带对话抽屉:气泡、技能条、页面上下文、附件、语音、流式与会话都在壳子里。框架只定契约,不绑任何模型厂商。
布局、基础、表单、数据、反馈、媒体、设备、页面与 AI 组件,统一继承 BaseComponent,Class / Style / Disabled 一致。
Config.AddModule<T>() 扫描程序集,把整个业务模块的页面、菜单、服务、实体自动接进框架,按领域水平切分。
ServiceProxy 让客户端直接消费与 [WebApi] 服务端接口同签名的接口,不用手写 HttpClient 样板。
明暗双主题、CSS 令牌驱动、切换不闪;文案走 LocalService 词条化,框架自带中英词典。
一个插件一个工程:浏览器首屏只下核心壳、进菜单时按需下载整包,页面 @inject 的 [WebApi] 服务由包壳现场兜底、页面代码一字不改。Server / 桌面等价 eager、零回归。
可视化流程 + 运行时引擎:会签 / 或签、并行网关扇出汇聚、子流程派生唤醒、节点钩子与真实通知投递,单据按状态流转。
数据集 → 可视化向导拖拽成图;透视 / 图表 / 套打画布所见即所得,一键导出 Excel 与打印。
账号 / 角色 / 组织架构 / 数据字典 / 个人中心开箱即用;菜单即权限,还能细到列级与按钮级显隐,改角色即刻生效。
登录、角色、菜单权限、接口契约、在线会话 —— 服务端不是留给你自己接的,AddKnownCore() 加 UseKnown() 两句就装好。
AddKnownCore() 一句话装好 Cookie 认证与授权管线,IAuthProvider 可换成你自己的用户体系。
[WebApi] 标接口、[Service] 标实现,框架把接口方法映射成 HTTP 端点;客户端拿同一份接口直接调(ServiceProxy),一份契约两端复用。
[Menu("订单管理", Roles = "管理员,财务")] 写清谁能看见:侧栏按登录人装配,直接敲 URL 也会被页面守卫挡回首页;还能细到列级与按钮级显隐(Perm / HideColumns)。
登录用户的 SessionId 随认证 Cookie 走,在线名单、吊销门禁与心跳同源,踢下线立即生效。
[WebApi]
public interface IOrderService
{
Task<PagingResult<Order>> QueryAsync(PagingCriteria c);
Task<Result> SaveAsync(Order info);
}[Service]
public class OrderService(Database db) : IOrderService
{
public Task<PagingResult<Order>> QueryAsync(PagingCriteria c)
=> db.QueryPageAsync<Order>(c);
public Task<Result> SaveAsync(Order info)
=> db.SaveAsync(info);
}// Program.cs:后端骨架只有这两句
builder.Services.AddKnownCore(); // Cookie 认证 + 授权
var app = builder.Build();
app.UseKnown(); // 把所有 [WebApi] 映射成真实端点
// 菜单即权限:Roles 决定谁能看见这一项
[Menu("订单管理", Icon = "file-text",
Roles = "管理员,财务")]业务代码、组件、Schema 全都不用改,换一个启动项目就换一种交付形态。
内网系统首选:免下载、秒开、数据库就在身边。
纯静态发布,扔到 CDN 就能跑,PWA 可离线。
同一套页面内嵌进桌面壳,接串口、接相机、接打印机。
纯 Razor 类库,不需要额外的 NuGet 源,也没有 node 构建链。
引入 NuGet 包,或在解决方案里直接引用工程。
dotnet add package Known核心服务、鉴权与菜单提供者一次装配完成。
builder.Services.AddKnown(o => o.Id = "MyApp");样式与主题能力全在这里,不用手工拷贝。
_content/Known/css/web.css
扫码关注公众号
扫码加入 QQ 群