TKWF.Ext.Analytics
0.1.1
See the version list below for details.
dotnet add package TKWF.Ext.Analytics --version 0.1.1
NuGet\Install-Package TKWF.Ext.Analytics -Version 0.1.1
<PackageReference Include="TKWF.Ext.Analytics" Version="0.1.1" />
<PackageVersion Include="TKWF.Ext.Analytics" Version="0.1.1" />
<PackageReference Include="TKWF.Ext.Analytics" />
paket add TKWF.Ext.Analytics --version 0.1.1
#r "nuget: TKWF.Ext.Analytics, 0.1.1"
#:package TKWF.Ext.Analytics@0.1.1
#addin nuget:?package=TKWF.Ext.Analytics&version=0.1.1
#tool nuget:?package=TKWF.Ext.Analytics&version=0.1.1
TKWF.Extensions
TKWF 扩展模块仓库——权限、导航、身份、审计、设置、邮件、存储、账户、数据字典等。
扩展模块与主框架 TKW.Framework 解耦:扩展代码、测试、使用指南独立演进,不进入主框架
TKW.Framework.slnx。
架构图
扩展仓架构图总览(archify 生成,自包含 HTML,可直接双击打开):.archify/index.html
| ID | 图 |
|---|---|
| A2 | 扩展仓全景——50+ 扩展按领域聚类、落地状态、对主框架契约的依赖 |
主框架(
_TKWF/ TKW.Framework)自己的架构图在主仓.archify/index.html,由主框架维护。
扩展模块一览
各扩展模块使用说明
| 扩展 | 版本 | 说明 | Tag | README | 指南 |
|---|---|---|---|---|---|
| Permissions | V0.9.5 | 细粒度权限定义 / fail-closed 检查 / 编译期权限名校验(PERM001)/ 多用户批量权限检查(V0.9.0:IPermissionBatchChecker——单权限×多用户,按 ProviderKey 分组归因) |
$(System.Collections.Specialized.OrderedDictionary[Permissions]) | README | 指南 |
| Permissions.Abstractions | V0.2.1 | 权限契约抽象(IPermissionChecker/RequirePermission/IRoleProvider) |
— | — | —(并入 Permissions) |
| Permissions.Validation | V0.8.0(规则集)/0.1.1(包线,未发布) | 扩展侧 PERM001 DiagnosticAnalyzer(从内核移除耦合);IsPackable=false 从不发布独立包(源码 ProjectReference 接线),V0.8.0 为规则集功能线版本,0.1.x 为 MinVer 包线 tag |
— | — | —(并入 Permissions) |
| Identity | V0.5.3 | 用户 / 角色 / 用户角色分配 + PasswordHasher 凭据验证;GetRolesAsync VEntity 跨表 JOIN(V0.3.0)+ REST 直接暴露(V0.4.0:UserRoleViewQueryService——GET /api/identity/user-roles 仅本人,VEntity DTO 一等公民含 DisplayName/IsSystemRole) |
$(System.Collections.Specialized.OrderedDictionary[Identity]) | README | 指南 |
| Account | V0.5.0 | 账户锁定 + 密码重置流程(主框架 V4.9.45 缺口补齐)+ 登录历史与异常检测(V0.3.0,消费 SecurityLog 查询)+ 依赖倒置(V0.4.0,SecurityLog 契约改引 Abstractions) | $(System.Collections.Specialized.OrderedDictionary[Account]) | README | 指南 |
| Account.Abstractions | V0.1.2 | 账户契约抽象(IAccountPasswordManager 等——ADR48 D7 依赖倒置,零框架引用纯 BCL) |
— | — | —(并入 Account) |
| AuthCenter | V0.12.0(功能线)/已发布 v0.10.1 | 认证中心(2026-10-06 归层:Authentication → AuthCenter 全面归层 + 内建标准对内端点;令牌体系手写 RS256 JWT + kid 轮换 + 黑名单落库 + Refresh rotation + TokenVersion 闭环 / 认证矩阵 Provider(短信 + 密码)+ 外部 IdP 桥接(T5 2026-10-09:IExternalIdpLoginService 借道 Federation——微信双源 Provider/ApiClient/LoginService 已删,协议单源归平台网关库) / 登录保护 / 票据换令牌(PKCE)/ 身份适配层(JwtDomainUserParser/ITokenVerifier/IAuthorizationMapper/UserHelperBase/中间件)/ 跨系统映射 / 平台凭证 / 账号查询写契约 + 档案能力(V0.9.0 起 UserCenter 基础功能并入——UserProfile 1:1 档案表 + GetProfileByUIdAsync))+ V0.6.0(归层迭代:包名/命名空间/契约包 AuthCenter.Abstractions 统一归层——Federation 同步;登录门面升级 LoginResult(门面内认证→取账号→签发全编排,表现层零编排);AuthCenterWebExtension(原 JwtAuthenticationWebExtension)ConfigureEndpoints 内建 6 标准对内端点(sms 验证码/短信登录/外部 IdP 登录(T5:/login/external/{channelType} 替代 /login/wechat)/refresh/logout/票据换令牌——minimal API + 游客帧 + 免认证 + AuthCenterEndpointOptions TKWF:AuthCenter:Web 路径可配置,配置分层 AGENTS §8)) + V0.7.0(E4 密钥管理抽象(CPM 4.10.61)——删 PlatformCredentialKeyStore/DevRsaKeyCache 静态类,PlatformCredentialService 注入 keyed ISymmetricKeyProvider(SymmetricKeyProviderKeys.AuthCenter,FileSymmetricKeyProvider 构造即加载:生产 fail-fast / 开发两分支)+ DevKeyCache<RsaKeySet> 单例(dev 密钥缓存非静态);PlatformCredentialEntityDataService 加密上移服务层(回归纯持久化,消除唯一 SG1 ctor 阻塞点);AES-GCM 单段规范格式(委托 AeadEncryptionUtil);测试并行化恢复(去 DisableTestParallelization)) + V0.8.0(认证 API 补全——内建 3 端点:/verify(已认证内省,判别器=中间件验签产物,无效 Bearer 401 非 RFC 7662)/ /grants(应用授权状态,AuthGrantEntity 数据底座唯一索引 UX(UserId,AppId,Source) + IAuthGrantQueryService/IAuthGrantCommandService 双门面)/ /sms/verify(验证码独立校验);B5 票据绑定缺口闭环——OAuthTicketIssueRequest.UserId 签发即绑 + BindTicketAsync 已认证帧补绑(userId 取 User 不经请求体,CAS 条件更新);exchange 成功落登录授权(best-effort);配置分层 3 新开关) + V0.9.0(身份域重构与密码能力——ADR-AuthCenter-身份域数据模型与密码能力边界:A.1-A.8 凭据/档案表级分离(AuthAccount 瘦身凭据白名单 + UserProfile 1:1 档案 + 表名 TKWF_AuthAccount/TKWF_UserProfile)/ AuthLevel 泛化(1=手机号/2=联邦快捷,剔 3=教师核实)/ TeacherVerified 迁出(令牌移除 teacher_verified claim)/ 联邦 Id 归一化(微信 3 列删 → PlatformAccountMap 通道)/+ B.9-B.11 密码三件套 + 密码策略(SecurePassword 协议 决策 1——客户端算 clientHash+salt 服务端零明文 + PasswordPolicyOptions 历史防重用 + 初始强制改密 + 账号冻结 + IRateLimitCheck 频控 v4.10.67)(PasswordAuthenticationProvider + IPasswordLoginService + SetPasswordAsync(CAS+TokenVersion++)+ IPasswordResetService 找回三通道 SMS/Email/扫码,不实现 IAccountPasswordManager 第二实现)/ C.14 UserCenter 退役(IUserProfileSource 标 Obsolete)/ EnabledAuthTypes fail-closed 生效;134 用例全绿) + Web 装配钩子(v4.10.45:AuthCenterWebExtension<TUserInfo>——RestoreUser 委托直传 + BeforeAuthentication 锚点 + 内建端点,旧 AddJwtAuthentication/UseTkfwJwtAuthentication 删除;短路判定 IsAuthenticated 门控 + 黑盒哨兵冒烟) + ITokenVerifier 无帧消费 500 修复(V0.5.2 游客帧)+ 开发模式临时 RSA 密钥修复(V0.5.3 DevRsaKeyCache)+ Development 启动崩溃修复(V0.5.4 不传参) + V0.10.0 外部 IdP 票据 SPA 兑现(2026-10-19——方案 Oracle PASS WITH CONDITIONS 用户裁定全局最优解:独立路由端点 POST /login/ticket(事件取 OpenId 链路"票 → token1"前端兑换面)+ 共享编排 IFederatedLoginOrchestrator(code 通道与票据通道统一委托——P1-1 UId 直读/映射/建号 fallback,接口不变)+ IExternalTicketLoginService 验票(P1-3 统一 TICKET_INVALID/P1-2 仅 null-claimant 票/P2-4 强制频控 ext:ticket:{ip});测试 177 用例全绿(146→177 +31)) + V0.10.1(2026-10-20 契约键名双收——2be7bb9 起:请求 DTO 双收 snake_case 文档键别名 + TokenResponse 双发 camelCase/snake_case 键并存,测试 181 用例全绿) + V0.12.0(2026-10-25 端点契约化 B3a/B3b——MapGenerated 生成化,Oracle1 §9.18/9.19 裁定实施,破坏性:错误体 ErrorResponse→RFC 9457 ProblemDetails 信封(errorCode 值存活)/logout 204→200/grants ?app_id→?appId;9 门面契约下沉(DTO 首参 + 类型化异常 ErrorCode 覆写 + LoginResult 删除)+ 11 端点 [ApiExpose] + DeclareEndpoints+MapGenerated(11 手写 handler 删除)+ EndpointContracts.cs 13 DTO 迁主包;框架 B4 三连修 v4.10.82/83 + 门控精化 v4.10.84;测试 198 用例全绿(+errorCode 存活 + 门控锁定 2)) |
$(System.Collections.Specialized.OrderedDictionary[AuthCenter]) | README | 指南 |
| Federation | V0.15.0 | 认证体系三层架构的对外连接层壳(2026-10-09 TrustCenter 剥离后重定位;原 V0.2.0 泛内核形态随信任内核迁出)——平台 IdP 连接 + 编排 + /feberation/* 端点:ISsoChannel 集合编排(ISsoLogin/ISsoChannelFactory,I2-1 契约迁 Federation.Abstractions)/ FederationWebExtension(POST {prefix}/login[ /{channelId}]/GET {prefix}/jwks/POST {prefix}/event/{channelId}——TKWF:Federation:Web 配置分层)/ 多通道设施(IChannelRegistry 系列 + SsoChannelRegistryEntity DB 动态权威 + ChannelAlias 双键)/ ExternalIdpAuthenticator 外部 IdP 借道桥接(AuthCenter.Abstractions 契约,委托平台库通道非双实现——根因修复)/ profile API(scope 强制 + 审计)/ 事件回复链(EventOrchestrator 双桶迭代 + IEventReplyHandler 集合 + EventReplyHandlerBase 签票基类——V0.9.0:TestEventReplyHandler 删除迁移平台层,handler 迭代权统一编排器(W3 绑定桶对微信可达));经 TrustCenter.Abstractions 契约调签发 token2/accesscode(合法 L2);配置节拆分为 TKWF:Federation:ChannelRegistry/:Web(签发配置迁 TKWF:TrustCenter);历史版本线 V0.2.0(E4 密钥抽象)/V0.3.0(多通道 Phase 1)/V0.4.0(Phase 2/3 DB 动态权威 + ChannelAlias)/V0.7.0(对外路由命名空间)/V0.8.x(外部身份联邦 E3)已发布;V0.11.0(Iteration 2 渠道关注关系域,待发布):关注域(IFollowStateService + FollowEventEntity/FollowStateEntity + FollowChangedEvent 域事件——仅状态变化发布)+ 编排记录在后(R3)+ 免登入口(ILoginEntryService + TKWF:Federation:LoginEntry)+ 传输/语义分层(ChannelInboundContext/ChannelEvent/ChannelCapabilities) |
$(System.Collections.Specialized.OrderedDictionary[Federation]) | README | 指南 |
| Federation.Abstractions | V0.5.0 | 联邦通道编排契约抽象包(V0.1.0 首发——2026-10-18 ④ 裁定:通道编排契约自 Federation 主包收口独立契约包,对齐 AuthCenter.Abstractions/TrustCenter.Abstractions 先例):IChannelRegistry(按 ChannelId/alias 选区)/IChannelSource(平台库投影统一 ChannelConfig)/ChannelConfig(公共列 + Extra 扩展字典)/IEventReplyHandler(事件回复处理器——消费方实现 first-non-null-wins)/IEventOrchestrator(事件编排门面——平台回复 → handler 迭代 → null 兜底);namespace 保持 TKWF.Ext.Federation(跨程序集同 namespace——消费方零 using 迁移,仅 csproj 改引);最小依赖 TKWF.Domain(IDomainService)+ TrustCenter.Abstractions(SsoChannelEventContext/EventReplyResult——纯 BCL 契约包);零实体零 SG1 零 Initializer;实现(CompositeChannelRegistry/StaticChannelRegistry/EventOrchestrator)留 Federation 主包;9 平台库 + WeChatOperations 改引本包(替代直引 Federation 主包);V0.2.0(待发布——Iteration 2 契约收口):ISsoChannel.cs 自 TrustCenter.Abstractions 迁入(通道契约归属纠正,FA 解除 TC 引用)+ 关注域契约(IFollowStateService/IFollowChannelQuery/FollowChangedEvent/ILoginEntryService+FederationLoginEntryOptions)+ ChannelEvent 系列/ChannelCapabilities([Flags] DIM None fail-closed)/ChannelInboundContext(替代 SsoChannelEventContext) |
$(System.Collections.Specialized.OrderedDictionary[Federation.Abstractions]) | README | —(并入联邦互联指南) |
| TrustCenter | V0.3.3 | 认证体系三层架构的应用间信任中枢(纯信任内核——2026-10-09 自 Federation 剥离,2026-10-10 用户裁定 SymmetricKeyProviderKeys.TrustCenter 等框架组适配后统一发布):应用注册(SsoClientEntity origin 白名单 + scope + AES-GCM credential + per-channel HMAC + RegisterAsync 返回一次性明文 client_secret(V0.2.2——OAuth 动态注册 RFC 7591,注册契约缺口修复))/ token2 手写 ES256 独立密钥域 + kid 轮换 + JWKS(与 AuthCenter RS256 完全独立)/ accesscode(120s 原子 CAS + SHA256 + PKCE + 安全数据投递增强——Payload AES-GCM 密文落库(容量 ~4068) + ExpectedClaimant 进原子 CAS 无 TOCTOU + Issue/Peek/Redeem/CleanupExpiredAsync)/ ISsoChannel 契约定义(契约在此、编排在 Federation);TrustCenter.Abstractions 契约包(ISsoChannel/IToken2Service/IAccessCodeService + DTO,零实体零 SG1);信任内核纯签发零编排(Federation 连接层经契约调签发);内网中枢零外部协议库引用;配置 TKWF:TrustCenter 节;表 TKWF_SsoClient/TKWF_AccessCode |
$(System.Collections.Specialized.OrderedDictionary[TrustCenter]) | README | 指南 |
| Federation.WeChat | V0.16.1 | 微信公众平台连接器(大使馆/平台网关库——纯库无装配无持久化,方向对外接微信 IdP):WeChatApiClient 出站(access_token L1 缓存+并发锁+提前 5min 刷新+code→openid+sns/userinfo 降级)+ WeChatOptions(TKWF:Federation:WeChat 节,凭证自持 Oracle P2-4)+ 双通道(WeChatOauthChannel wechat_oauth / WeChatEventChannel wechat_event + WeChatEventCrypto 事件验签——信任根 msg_signature+AES 一票否决)+ 事件回复 Handler 三件套(V0.4.0):WechatEventReplyHandlerBase 平台基类(MsgType/Event 二级分发 + 图文工具多图文 + 协议门控 unsubscribe/MASSSENDJOBFINISH 禁回复)+ WechatTemplateEventReplyHandler(模板驱动,消费方显式注册)+ WechatProbeEventReplyHandler(探针,ProbeEventReplyHandlerEnabled 默认 false 门控)+ WeChatEventChannel 编排放权(V0.4.0)(HandleEventAsync 验签解密富化 __decrypted_xml 返回 null——被动回复 XML 信封上移平台基类)+ V0.4.1 增强:菜单出站 3 API(CreateMenuAsync/GetCurrentSelfMenuInfoAsync 结构化 poco/DeleteMenuAsync——自实现不引 Senparc)+ IWeChatCredentialResolver 凭证解析可插拔契约(缺省 Options 实现 DI 注册,扩展 DB 实现两源并存)+ template 多图文升级(NewsReplyTemplateV2 articles 数组优先 + 单图文兼容)+ AddWeChatFederationChannels() 注册;+ V0.4.2(RawXml 逃逸口):WechatReplyPayload 增可选 RawXml 字段(第三位置可选参——完整微信被动回复 XML 原样透传跳过 text/news 重组(防双重信封——SyncProxy 下游自组信封 XML 原样回复预备);优先级 RawXml > News > Content,默认 null 存量零破坏);不引 AspNetCore(端点归装配层)、零持久化零 Store;测试 100 用例全绿 |
$(System.Collections.Specialized.OrderedDictionary[Federation.WeChat]) | README | 指南 |
| Federation.WeChat.MessageGateway | V0.1.1 | 微信公众号消息网关核心判定运行库(纯逻辑零实体零持久化零 DI 零 DB——用户三部分分层裁定 ①,对齐 DataPort/Tagging 运行库提炼先例):WeChatMessageRouteRuleMatcher 路由规则判定(MatchMode None/Exact/Contains + MsgType 通配/逗号分隔多值(V0.1.1 消息类型多选)/Event 仅 event 参与 + SortOrder 升序首命中)/ WeChatMessageIdempotencyKeyBuilder 幂等键规范化(msg:/evt: 前缀类型隔离 + ChannelId 入键——消息 MsgId / 事件 FromUserName+CreateTime 双形态)/ WeChatMessageForwardDecider 转发决策与降级链(LocalOnly/AsyncCopy/SyncProxy/PreprocessSync 决策 + 失败降级 LocalFallback——降级链步进 LocalRender→Template→DefaultReplyText)/ WeChatCircuitBreaker 熔断状态机(关→开→半开→关,每 Endpoint 独立计数,默认阈值 3 / 开窗 60s)/ 常量(WeChatMessageTypes/WeChatMessageMatchModes/WeChatMessageForwardModes/WeChatEndpointAuthTypes);依赖 TKWF.Federation.WeChat 协议类型(WechatEventContext/WechatReplyPayload)单向;被领域扩展 TKWF.Ext.WeChatOperations V0.3.0 消费(② 装配);测试 57 用例全绿 |
$(System.Collections.Specialized.OrderedDictionary[Federation.WeChat.MessageGateway]) | README | —(并入 WeChatOperations 指南) |
| WeChatOperations | V0.6.1 | 微信公众号运营扩展(实体型——V0.4.0 设计缺口修复:客户端 DTO 生成链路根治 + 网关 REST 端点 + 总开关 DB 化):8 实体 SG1 数据底座(WeChatChannelConfigEntity 凭证 AES-GCM 密文/MaterialEntity 素材库/ReplyRuleEntity 全消息类型回复规则(SceneType Subscribe/Keyword/Click/Image/Voice/Video/ShortVideo/Location/Link/Scan/Default)/SubscriptionStatEntity 订阅统计/MenuSnapshot+MenuVersion 菜单基准与版本/InteractionLog+MenuPublishLog 日志审计)+ 6 门面(IChannelConfigService/IMenuService 发布链(快照+版本+审计事务)/IReplyRuleService/IMaterialService/ISubscriptionStatService/ILogQueryService)+ WeChatOperationsReplyHandler(继承平台基类二级分发 14 分支——欢迎语/关键词/Click 映射/全消息类型/Scan + 内部组合 template 兜底(Oracle P0 选项 A)+ 订阅统计 + 交互日志)+ 两源并存(DB 权威 + Options 降级——DbWeChatCredentialResolver/DbWeChatChannelSource Insert(0) 前置)+ WeChatOperationsWebExtension(13 端点 + 配置分层 + [RequirePermission] 权限标注)+ 不走动态加载(编译期静态注册);+ V0.2.0 网关模块(消息网关核心判定消费运行库 Federation.WeChat.MessageGateway——MessageGatewayService 门面编排:路由判定/幂等键/转发决策与降级链/熔断状态机 + 网关 Options(TKWF:WeChatOperations:Gateway 节——GatewayEnabled 默认 false/幂等保留 7 天/待处理超时 5 分钟/重试 3 次);+ V0.2.1 对齐迭代(DMP-Lite 接口对齐 P0 缺口四项——MessageRouteRuleEntity.Name 规则显示名 / IMaterialService.GetReferencesAsync 素材引用反查(跨 ReplyRule 聚合 MaterialReferenceDto 清单)/ IMenuService.GetClickKeysAsync 菜单树递归收集 click key(自动生成映射行)/ WeChatOperationsOptions.MessageBusinessEnabled 消息业务总开关(默认 true——关闭停发本地回复统一维护提示,转发网关不受控));+ V0.3.0 P1 二期对齐四项(消息类型多选(MsgType 逗号分隔多值 + matcher 适配——替代 P1-5 单值方案)/ 来源场景维度(SubscriptionStat.Source + 唯一约束扩 (ChannelId,StatDate,Source) + RecordAsync/GetTrendAsync 增参 + WeChatSubscriptionSources)/ 交互日志耗时(InteractionLog.DurationMs + Stopwatch 计时)/ SyncProxy/PreprocessSync 真透传(DownstreamForwardClient.SendRawXmlAsync 完整 XML 透传 → WechatReplyPayload.RawXml 原样接管回复防双重信封 + RouteSyncProxyAsync 熔断/Timeout/Fail 降级 + IsValidReplyXml));GUI 阶段二交 DMP-Lite(方案 §八)+ V0.3.1 P2 对齐迭代四项(状态卡聚合 IWeChatOperationsStatusService(DMP-Lite 5.8)/ 匹配过程明细(InteractionLog.MatchTraceJson 逐行推演——DMP-Lite 5.6 §4)/ 统计卡聚合(GetSummaryAsync 区间新增/取消/日均/净增/累计增长率——DMP-Lite 5.7 §2)/ 超时单位统一(DownstreamEndpointDto.TimeoutMs 派生)) + V0.4.0 设计缺口修复(DMP-Lite 转达四项裁定——① 客户端 DTO 生成链路根治:8 门面实现类 public + [GenerateController] + 接口方法 [ApiExpose(RestRoute/RestMethod)] 锁 /api/wechat-ops/*(SG1b 生成端点 + SG3 客户端 DTO/代理;手写 WeChatOperationsWebExtension/WeChatOperationsEndpointOptions 删除——破坏性)+ 安全 wire DTO 化(SaveChannelRequest/SaveEndpointRequest/SetGatewayEnabledRequest 凭证明文 body 传输)② 网关 REST 端点补全:/gateway/* 9 端点(rules×3 + endpoints×3 + status + enabled + ListForwardLogsAsync;RouteAsync 排除)③ 消息业务总开关 DB 化:FeatureManagement 消费(WeChatOperationsFeatureDefinitionContributor 声明 + Options 启动默认 + DB 权威双源——IFeatureManager.SetValueAsync 运行时切换)+ [TKWFExtensionDependency] 补声明);测试 143 用例全绿;V0.5.0(待发布——Iteration 2 订阅统计派生改造 I2-10):删 SubscriptionStatEntity(12→11 实体,7 运营 + 4 网关)、GetTrendAsync→IReadOnlyList<SubscriptionStatPointDto>(Date/NewFollows/Unsubscribes/NetGrowth/Source 委托关注域 IFollowStateService.GetDailyStatsAsync)、handler 删写路径(统计口径与关注域事件日志一致)、REST 形状变化(SubscribeCount→NewFollows 等 4 键名)+ SG3 重生成 + R3 附条件语义(DedupeKey 冲突同事务回滚——接受的已知代价);测试 143+2 全绿 |
$(System.Collections.Specialized.OrderedDictionary[WeChatOperations]) | README | 指南 |
| Federation.QQ | V0.4.1 | QQ 互联连接器(大使馆/平台网关库——出站-only 精简形态,N3 落地):QqApiClient 出站(code→access_token→/me→openid 一次性链 + redirect_uri 一致性 P1-4 + fmt=json 强制 + JSONP 剥壳兜底 + 用户级 token 不缓存 P1-5 + GetMeAsync unionid 开关 + get_user_info ret/msg 裁剪)+ QqOptions(TKWF:Federation:QQ 节,凭证自持 P1-1)+ QqOauthChannel(qq_oauth——code 缺拒/redirect_uri 缺拒/AuthLevel=2/不感知 state P1-3,external_uid 恒=openid P1-2)+ AddQqFederationChannels() 注册(TryAddEnumerableConstructible ADR92);信任根降级(出站换取链——QQ 无入站回调,P5 不适用);测试 16 用例全绿;不引 AspNetCore、零持久化零 Store |
$(System.Collections.Specialized.OrderedDictionary[Federation.QQ]) | README | 指南 |
| Federation.Alipay | V0.3.1 | 支付宝开放平台连接器(大使馆/平台网关库——出站-only + RSA2 双向签名,N4 落地):AlipayApiClient 出站(gateway.do 统一网关 RSA2 签名调用——alipay.system.oauth.token auth_code→user_id(无 biz_content/code 顶层)+ alipay.user.info.share(auth_token 顶层字段,snake_case 裁剪)+ refresh 续期封装 + BuildAuthorizeUrl)+ AlipaySignService(RSA2 双向签名核心——请求签名委托框架 AlipaySignUtil + 同步响应自实现验签(保留原始 body 防 JSON 顺序差异,FAIL_SIGNATURE 拒信任)+ 通知验签 rsaCheckV1 等价)+ AlipayOptions(TKWF:Federation:Alipay 节——ChannelId/AppId/PrivateKeyPath/AlipayPublicKeyPath PEM 路径,凭证自持 P2-4,生产 fail-fast 缺钥拒)+ AlipayOauthChannel(alipay_oauth——code 缺拒/redirect_uri 缺拒(N4 P1-2)/AuthLevel=2/不感知 state P1-1,external_uid=user_id)+ AlipayChannelSource(组件 8.5 多通道投影)+ AddAlipayFederationChannels() 注册(ADR92);信任根强双向签名(出站换取链 + 响应验签);测试 12 用例全绿;不引 AspNetCore、零持久化零 Store |
$(System.Collections.Specialized.OrderedDictionary[Federation.Alipay]) | README | —(并入联邦互联指南) |
| MFA | V0.2.1 | 多因素认证(TOTP RFC 6238 自研零第三方 + 短信验证码双方法:绑定/解绑 + 挑战-验证流(一次性 TTL 票据 + 单次消费防重放)+ 尝试频控(内存滑动窗口)+ 恢复码;独立扩展零依赖——短信渠道经消费方 IMfaSmsSender 注入,登录编排归消费方;secret AES-GCM 密文落库)+ V0.2.0(E4 密钥管理抽象(CPM 4.10.61)——删 MfaSecretKeyStore 静态类,TotpMfaMethod ctor 注入 keyed ISymmetricKeyProvider(SymmetricKeyProviderKeys.Mfa,消费点即注入点——修正 Initialize/消费跨类分裂);删 MFA 测试反射 ResetMfaSecretKeyStore(GetField("_key"))改注入式 internal Reset;修正 MfaSecretEntityDataService 陈旧注释;AES-GCM 单段规范格式) |
$(System.Collections.Specialized.OrderedDictionary[MFA]) | README | 指南 |
| Navigation | V0.1.2 | 菜单数据模型 / 贡献机制 / 权限过滤(从主框架迁出) | $(System.Collections.Specialized.OrderedDictionary[Navigation]) | README | 指南 |
| Navigation.Abstractions | V0.1.0 | 导航契约抽象(IMenuContributor/MenuItemDefinition/MenuConfigurationContext——ADR48 D7 依赖倒置,零框架引用纯 BCL) |
— | — | —(并入 Navigation) |
| AuditLogging | V0.5.1 | 审计日志 FreeSql 存储 + SG1 实体 + 查询 API + 统计聚合与清理(V0.3.0)+ 管理 API(V0.4.0:[GenerateController] + ExcludeMethods 排除含 ArgumentsJson 标准 CRUD + 5 REST 端点) + 聚合 SQL 下推(V0.4.2:TopN 经 GroupCountAsync——V4.10.39 分组聚合 API) |
$(System.Collections.Specialized.OrderedDictionary[AuditLogging]) | README | 指南 |
| Settings | V0.3.1 | 全局/用户级配置持久化 + 分层读取 | $(System.Collections.Specialized.OrderedDictionary[Settings]) | README | 指南 |
| BlobStoring | V0.3.0 | 二进制大对象本地文件系统存储 + FreeSql 记录 + FileStream 流式下载(V0.2.0) | $(System.Collections.Specialized.OrderedDictionary[BlobStoring]) | README | 指南 |
| Emailing | V0.3.0 | SMTP/MailKit 邮件发送 + FreeSql 发送记录 + 指数退避重试(V0.2.0);契约抽取至 Emailing.Abstractions(ADR48 D7) |
$(System.Collections.Specialized.OrderedDictionary[Emailing]) | README | 指南 |
| Emailing.Abstractions | V0.1.1 | 邮件发送契约抽取(IEmailSender/EmailMessage——ADR48 D7 依赖倒置,Notifications 等消费方复用) |
— | — | —(并入 Emailing) |
| DataDictionary | V0.3.0 | 数据字典集中管理(定义 + 项 + 按编码查询)+ VEntity 读模型联邦(V0.2.0:vw_DictionaryItemView JOIN Definition→Item 单查询下推——GetOrLoadAggregateAsync 两步骤一,"定义存在无项"语义保留,树语义保护经门面) |
$(System.Collections.Specialized.OrderedDictionary[DataDictionary]) | README | 指南 |
| Tagging | V0.4.6 | 标签存储扩展(标签算法已回归 TKW.Framework.Utility.Tags,ADR52 瘦身;V0.4.0 AC 自动机 DictMatch 批量匹配 + Options 配置接入);+ 聚合 SQL 下推(V0.4.3:GetFrequencyAsync/GetDimensionDistributionAsync 经 GroupCountAsync/GroupByAsync——V4.10.39;GetTrendAsync 保留内存分桶) |
$(System.Collections.Specialized.OrderedDictionary[Tagging]) | README | 指南 |
| PrintTemplates | V0.3.0 | 打印模板引擎与版本化(Scriban 沙箱渲染 + Draft/Active/Archived 生命周期) | $(System.Collections.Specialized.OrderedDictionary[PrintTemplates]) | README | 指南 |
| Metrics | V0.2.1 | 业务指标计算引擎(规格文档驱动复合指标计算——复购率/留存/同期群/漏斗/时段桶/比率;核心计算在 TKW.Framework.Utility.Metrics)+ 指标结果持久化(V0.2.0:IMetricResultStore 契约 + MetricResultMapper 标准化行映射——实体归消费方 SG1 接线) |
$(System.Collections.Specialized.OrderedDictionary[Metrics]) | README | 指南 |
| Analytics | V0.1.0 | 业务分析服务(spec 文件驱动 + flint 单一真相 JsonDocument 透传——核心 TKW.Framework.Utility.Analytics 零依赖 + 本包 IAnalyticsQueryService 门面 4 方法;manifest 状态校验 + domain/specKey 路径安全正则) |
$(System.Collections.Specialized.OrderedDictionary[Analytics]) | README | 指南 |
| Dashboard | V0.1.2 | 仪表盘数据服务(Metrics 展示层——JSON 描述符 + Widget 数据查询;不引入图表库) | $(System.Collections.Specialized.OrderedDictionary[Dashboard]) | README | 指南 |
| DataPort | V0.1.4 | 数据导入导出(三层架构——核心运行库+MiniExcel Provider+SG1 持久化;FileHash 幂等) | $(System.Collections.Specialized.OrderedDictionary[DataPort]) | README | 指南 |
| Notifications | V0.6.3 | 通知中心(站内通知收件箱+订阅+事件驱动通知+多通道抽象;第一个事件总线消费者);GetListAsync(name) VEntity 跨表 JOIN(V0.1.0);+ 多通道路由 UseChannels/Email(V0.2.0);+ 用户偏好路由 + 逐用户权限门控(V0.3.0,委托 Permissions v0.9.0 IPermissionBatchChecker);+ SignalR 实时推送通道(V0.4.0,独立包 TKWF.Ext.Notifications.SignalR,服务端非 UI);+ REST 直接暴露(V0.5.0:UserNotificationViewQueryService——GET /api/notifications/inbox 仅本人 + name 可空,VEntity DTO 一等公民含 Name/Severity/DisplayName) |
$(System.Collections.Specialized.OrderedDictionary[Notifications]) | README | 指南 |
| Notifications.SignalR | V0.2.0 | 通知中心 SignalR 实时推送通道(独立包——Hub 类型锚 + SignalRNotifier best-effort 推送 + 端点映射;FrameworkReference 共享框架零 NuGet;服务端非 UI,前端归消费方)+ Web 装配钩子(v4.10.45:NotificationsHubWebExtension——AddSignalR D6 内聚 + MapHub,旧 MapTkfwNotificationsHub 删除) |
$(System.Collections.Specialized.OrderedDictionary[Notifications.SignalR]) | —(并入 Notifications) | —(并入 Notifications 指南) |
| BackgroundJobs | V0.4.1 | 后台任务持久化增强(执行历史 JobExecution + 业务结果 JobResult 追踪 + 历史清理任务 V0.2.0(RetentionDays 启用)) |
$(System.Collections.Specialized.OrderedDictionary[BackgroundJobs]) | README | 指南 |
| BackgroundJobs.Quartz | V0.1.1 | Quartz AdoJobStore 一键封装(UseTkfwAdoJobStore 12 表自动建表/集群配置) |
$(System.Collections.Specialized.OrderedDictionary[BackgroundJobs.Quartz]) | README | —(并入 BackgroundJobs) |
| HealthCheck | V0.3.0 | 系统健康探测(net10 内置 HealthChecks + /health 端点 + 内置 DB 探针 AddDatabaseHealthCheck<T>(V0.2.0,IEntityReadOnlyDAC 红线合规路径))+ Web 装配钩子(v4.10.45:HealthCheckWebExtension——fluent 探针收集 + MapHealthChecks,旧 AddTkfwHealthChecks/MapTkfwHealthChecks 删除) |
$(System.Collections.Specialized.OrderedDictionary[HealthCheck]) | README | 指南 |
| RateLimiting | V0.3.0 | Web 层限流接线(ASP.NET Core AddRateLimiter + IP/用户分区 + 429/Retry-After;与 Domain [RateLimit] 双层防护)+ Web 装配钩子(v4.10.45:RateLimitingWebExtension——AddRateLimiter 展开 + UseRateLimiter,旧 AddTkfwRateLimiting 删除;标注式 RequireRateLimiting 仍需消费方 BeforeRouting 显式 UseRateLimiter) |
$(System.Collections.Specialized.OrderedDictionary[RateLimiting]) | README | 指南 |
| SecurityLog | V0.4.0 | 安全日志(登录/登出/改密/重置/锁定/注册/挑战事件 + IP/UA/结果 + 异常检测聚合 + 保留天数清理(V0.2.0) + 契约拆包(V0.3.0——公开契约迁 SecurityLog.Abstractions,命名空间不变) + 聚合 SQL 下推(V0.3.1:TopN 经 GroupCountAsync——V4.10.39 分组聚合 API)) |
$(System.Collections.Specialized.OrderedDictionary[SecurityLog]) | README | 指南 |
| SecurityLog.Abstractions | V0.1.1 | 安全日志契约抽象(ISecurityLogStore/ISecurityLogQueryService/ISecurityLogAnalyticsService + DTO/Options——ADR48 D7 依赖倒置,Account 消费方复用) | — | —(并入 SecurityLog) | |
| Approval | V0.4.0 | 轻量审批引擎(流程定义/审批实例/审批任务三实体 + 状态机 + 或签/会签 + 委派/加签/抄送/超时自动处理(v0.2.0)+ 完成事件回调;不依赖外部工作流引擎) | $(System.Collections.Specialized.OrderedDictionary[Approval]) | README | 指南 |
| OrganizationUnit | V0.5.0 | 组织单元(树形部门/团队/分组 + 物化路径 Level/Path + 循环防护/删除保护 + 用户关联 + 事务包裹)+ VEntity 化/下推(V0.2.0:vw_UserOrganizationUnitView JOIN OU→OUUser 单查询 + GetSubTreeAsync/GetAncestorsAsync 单表 SQL 下推(精确前缀/Code IN)+ 用户归属双模式) |
$(System.Collections.Specialized.OrderedDictionary[OrganizationUnit]) | README | 指南 |
| Calendar | V0.4.0 | 日历/排程(日历+事件 CRUD + 重复规则子集(Utility 收纳:DAILY/WEEKLY/MONTHLY/YEARLY + 月末钳制 + 绝对索引)+ occurrence 查询/合并 + UTC 契约) | $(System.Collections.Specialized.OrderedDictionary[Calendar]) | README | 指南 |
| FileManagement | V0.4.1 | 文件管理(目录树 + 文件元数据 SHA256/去重 + 文件版本化 + 配额(v0.2.0) + 用户级配额(v0.3.0:OwnerId 归属维度 + 所有权保留语义) + 并发上传竞态加固(v0.3.0:主表 UX 约束败者重查按内容决策——同内容幂等 / 不同内容新版本) + 上传 10 步安全链(防穿越/白名单/大小/ContentType 服务端推导)+ 依赖倒置 BlobStoring.Abstractions) | $(System.Collections.Specialized.OrderedDictionary[FileManagement]) | README | 指南 |
| BlobStoring.Abstractions | V0.1.1 | Blob 存储契约抽取(IBlobStorageService/BlobInfo/BlobStoringOptions——ADR50 L2 依赖倒置,FileManagement 消费) |
— | — | —(并入 BlobStoring) |
| FeatureManagement | V0.4.6 | 功能管理/特性开关(接口判定编译期定义(v4.10.31 A+ 阶段 3)+ Provider 链分层值(v0.2.0 扩展点)+ IFeatureChecker 实现(接入 [RequireFeature])+ 复杂 ValueType 类型化读写(v0.3.0)+ 变更事件分布式广播(v0.3.0)+ 管理 API) | $(System.Collections.Specialized.OrderedDictionary[FeatureManagement]) | README | 指南 |
列说明:README = 扩展技术规范(随 NuGet 发布,位于
_Framework/{扩展名}/);指南 = 使用指南(公开文档,位于docs/{扩展名}/)。Permissions.Abstractions/Validation、SecurityLog.Abstractions、Account.Abstractions、Navigation.Abstractions 无独立文档,详见对应主扩展的 README 与指南。
版本口径(2026-10-26 固化):本表"版本"列 = 已发布 tag(
git tag按包名前缀{Package}/vX.Y.Z取最新,权威源);打 tag 后须同步本表 +_Framework/{扩展名}/README.md+docs/变更记录.md。机器可读清单:docs/versions.json(build/gen-versions.ps1从 git tag 生成,55 包 + 公共 v tag);功能线领先行用双值写法(如 AuthCenterV0.12.0(功能线)/已发布 v0.10.1)。发布检查清单见docs/目录结构与版本管理规则.md§3.2/§3.3。
受影响面定向(2026-10-25——AuthCenter V0.12.0 端点契约化 B3a/B3b,L1):AuthCenter 198 用例全绿(181→198:+17——errorCode 存活断言 1 + DeclareEndpoints 门控锁定 2 + 既有适配 14)+ Federation 119 全绿 + WeChatOperations 143 全绿;双模式复验(DLL refs + NuGet 正式 4.10.84)slnx 构建 0 错误;框架 Domain.SG 297 + ApiService.SG 121 全绿;扩展 CI 40118994339 success;全量回归待发布前 L2。 受影响面定向(2026-10-20——Iteration 2 渠道关注关系域,L1):Federation 114 用例全绿(79→114:+35 关注域实体/门面/编排记录在后/域事件/免登入口)+ Federation.WeChat 110 全绿(100→110:+10 EventType 归一/
wechat.前缀 Attributes/IFollowChannelQuery 反查/Capabilities 声明/{ticket}免登)+ WeChatOperations 143 全绿(+2 派生改造适配——删SubscriptionStatEntity委托关注域);slnx 构建 0 错误(L0 编译门);全量回归待发布前 L2。 受影响面定向(2026-10-19——AuthCenter V0.10.0 票据 SPA 兑现迭代,L1):AuthCenter 177 用例全绿(146→177:+31——FederatedLoginOrchestratorTests8 +ExternalTicketLoginServiceTests9 + 端点冒烟 5 + 配置断言 2 + 既有适配 7)+ Federation 79 全绿(事件链签票→兑现闭环关联方);slnx 构建 0 错误(L0 编译门);全量回归待发布前 L2。 全量 2343 测试全绿(43 测试项目 / 0 失败 0 跳过)——2026-10-27 CPM lockstep 4.10.85→4.10.87 双模式复验:NuGet 模式(-p:UseLocalFw=false,13 包全解析 4.10.87)执行 L2 全量回归 + DLL 模式(refs 4.10.88-preview)slnx 构建 0 错误;历史基线演进链(2019→2098→2195→2206→2220→2233→2343)见docs/变更记录.md。
仓库定位
| 项 | 说明 |
|---|---|
| 主框架 | _TKWF/(TKW.Framework 领域框架) |
| 本仓库 | TKWF 业务扩展包(TKWF.Ext.*)——独立版本,与主框架版本无关 |
| 引用模式 | 扩展经 PackageReference 引用主框架发布的 NuGet 包(TKWF.Domain 等,CPM 集中 Directory.Packages.props;2026-09-15 迁移——独立构建,消费方视角与 NuGet 模式一致) |
| 版本管理 | MinVer 自动管理(git tag 即版本);各扩展独立版本(各打各的 tag,命名空间前缀如 Identity/v0.1.0) |
目录结构
_TKWF.Extensions/
├── _Framework/ # 扩展源码(每个扩展一个项目)
│ ├── Permissions/ # 权限扩展(V0.7.0:定义/检查/存储/管理 API/Admin.All)
│ ├── Permissions.Abstractions/ # 权限契约抽象(ADR48 D7 依赖倒置)
│ ├── Permissions.Validation/ # PERM001 编译期校验 Analyzer(V0.8.0,扩展侧)
│ ├── Identity/ # 用户 + 角色 + 用户角色分配 + 凭据验证
│ ├── Account/ # 账户锁定 + 密码重置流程(主框架缺口补齐)
│ ├── Navigation/ # 菜单数据模型 + 贡献机制 + 权限过滤
│ ├── AuditLogging/ # 审计日志 FreeSql 存储
│ ├── Settings/ # 设置管理 FreeSql 存储 + 分层读取
│ ├── BlobStoring/ # 二进制存储(本地文件系统 + FreeSql 记录)
│ ├── Emailing/ # SMTP/MailKit 邮件发送(V0.2.0:指数退避重试)
│ ├── Emailing.Abstractions/ # 邮件发送契约(IEmailSender——ADR48 D7 依赖倒置)
│ ├── DataDictionary/ # 数据字典集中管理
│ ├── Tagging/ # 标签存储扩展(算法已回归 TKW.Framework.Utility.Tags)
│ ├── Notifications/ # 通知中心(发布/收件箱/订阅 + 多通道路由 + 偏好路由/权限门控)
│ ├── Notifications.SignalR/ # 通知中心 SignalR 实时推送通道(v0.4.0 独立包,服务端非 UI)
│ ├── BackgroundJobs/ # 后台任务持久化增强(执行历史 + 业务结果追踪)
│ ├── BackgroundJobs.Quartz/ # Quartz AdoJobStore 一键封装
│ ├── HealthCheck/ # 系统健康探测(/health 端点接线 + 内置 DB 探针 v0.2.0)
│ ├── RateLimiting/ # Web 层限流接线(IP/用户分区 + 429)
│ ├── SecurityLog/ # 安全日志(登录/改密/锁定等安全事件)
│ ├── Approval/ # 轻量审批引擎(流程定义/实例/任务 + 状态机)
│ ├── OrganizationUnit/ # 组织单元(树形部门/团队/分组 + 用户归属)
│ ├── Calendar/ # 日历/排程(日历+事件 + 重复规则子集)
│ ├── BlobStoring.Abstractions/ # Blob 存储契约(IBlobStorageService——ADR50 L2 依赖倒置)
│ ├── FileManagement/ # 文件管理(目录树 + 文件元数据 + 版本化/配额 + 上传安全链)
│ ├── Federation/ # 对外连接层(外交部——2026-10-09 三层化:TrustCenter 剥离后连接层壳,/feberation/* 端点 + 编排 + 桥接 + 多通道设施)
│ ├── Federation.Abstractions/ # 联邦通道编排契约包(IChannelRegistry/IChannelSource/ChannelConfig/IEventReplyHandler/IEventOrchestrator——V0.1.0 ④ 裁定收口,TKWF.Federation.Abstractions)
│ ├── TrustCenter.Abstractions/ # 信任契约包(ISsoChannel/IToken2Service/IAuthorizationCodeService——信任内核契约;面① ISealedTicketService<T> 在主框架 Domain.Ticket,零实体零 SG1)
│ ├── TrustCenter/ # 信任中心(应用间信任中枢——2026-10-09 自 Federation 剥离,纯信任内核:应用注册/token2/accesscode/ISsoChannel 契约定义)
│ ├── Federation.WeChat/ # 微信公众平台连接器(大使馆/平台网关库——纯库无装配,TKWF.Federation.WeChat)
│ ├── Federation.WeChat.MessageGateway/ # 微信消息网关核心判定运行库(纯逻辑零实体零持久化零 DI——路由判定/幂等键/转发决策/熔断状态机,TKWF.Federation.WeChat.MessageGateway)
│ ├── WeChatOperations/ # 微信公众号运营(实体型——8 实体 + 6 门面 + 事件回复 handler + 生成端点(V0.4.0 `[GenerateController]`),TKWF.Ext.WeChatOperations)
│ ├── Federation.QQ/ # QQ 互联连接器(大使馆/平台网关库——出站-only,TKWF.Federation.QQ)
│ ├── Federation.Alipay/ # 支付宝开放平台连接器(大使馆/平台网关库——出站-only + RSA2 双向签名,TKWF.Federation.Alipay)
│ └── FeatureManagement/ # 功能管理(特性开关——定义收集 + 分层值 + IFeatureChecker)
├── _Tests/ # 测试(一组扩展一个测试项目)
│ ├── Extension.Permissions.Tests/
│ ├── Extension.Permissions.Consumer/ # 消费方集成验证
│ ├── Extension.Permissions.Validation.Tests/ # Analyzer 单测
│ ├── Extension.Identity.Tests/
│ ├── Extension.Account.Tests/
│ ├── Extension.Navigation.Tests/
│ ├── Extension.AuditLogging.Tests/
│ ├── Extension.Settings.Tests/
│ ├── Extension.BlobStoring.Tests/
│ ├── Extension.Emailing.Tests/
│ ├── Extension.DataDictionary.Tests/
│ ├── Extension.Tagging.Tests/
│ ├── Extension.OrganizationUnit.Tests/
│ ├── Extension.Calendar.Tests/
│ ├── Extension.FileManagement.Tests/
│ ├── Extension.Federation.Tests/
│ ├── Extension.TrustCenter.Tests/
│ ├── Extension.Federation.WeChat.Tests/
│ ├── Extension.Federation.WeChat.MessageGateway.Tests/
│ ├── Extension.Federation.QQ.Tests/
│ └── Extension.FeatureManagement.Tests/
├── docs/ # 公开使用指南(每个扩展一份)
│ ├── Permissions/权限扩展-使用指南.md
│ ├── Identity/身份管理扩展-使用指南.md
│ ├── Account/账户管理扩展-使用指南.md
│ ├── Navigation/导航扩展-使用指南.md
│ ├── AuditLogging/审计日志扩展-使用指南.md
│ ├── Settings/设置管理扩展-使用指南.md
│ ├── BlobStoring/二进制存储扩展-使用指南.md
│ ├── Emailing/邮件发送扩展-使用指南.md
│ ├── DataDictionary/数据字典扩展-使用指南.md
│ ├── Tagging/标签服务扩展-使用指南.md
│ ├── OrganizationUnit/组织单元扩展-使用指南.md
│ ├── Calendar/日历排程扩展-使用指南.md
│ ├── FileManagement/文件管理扩展-使用指南.md
│ ├── TrustCenter/信任中心-使用指南.md # 信任中心(应用间信任中枢——token2/accesscode/应用注册/安全数据投递)
│ └── FeatureManagement/功能管理扩展-使用指南.md
├── Directory.Build.props # TKWFSourceRoot + MinVer + 打包属性
├── Directory.Packages.props # CPM 集中包版本
├── AGENTS.md # 扩展仓库开发规则(AI Agent 与人工开发者必读)
└── TKWF.Extensions.slnx # 扩展解决方案
扩展设计文档(开发方案/ADR/设计思路)+ 使用指南存放于本公开仓库
docs/(2026-09-15 裁定后新方案落公开仓库;历史方案/审核报告/总览跟踪在主框架私有仓库_TKWF/docs/03_扩展模块/,渐进迁移)。
架构模式
所有扩展遵循统一架构模式(异常静默 + TryAddScoped + SG1 声明式实体):
扩展项目(net10.0)
├── Entity(partial class + [Table] + [DomainGenerateCode] + FreeSql [Column])
├── Store 抽象 + FreeSql 实现(internal sealed + 异常静默)
├── Manager 门面(internal sealed + 聚合查询)
├── ExtensionInitializer([TKWFExtension] + TryAddScoped 三钩子)
└── README.md(技术规范)
测试项目(xunit.v3 + FreeSql SQLite 内存)
├── ConsumerHostInitializer([TKWFEnabledExtension] 白名单样板)
└── 测试类(Store CRUD + Manager 聚合 + Initializer DI + 异常静默)
测试事务约定:SQLite 物理事务边界 + Noop 事务限制 + PG 测试容器评估见
docs/测试约定-SQLite物理事务与Noop限制.md(2026-10-02,转达登记落地)。
扩展启用(v4.9.85+ 必需)
扩展不再"发现即启用"——消费方须在领域初始化器上显式声明白名单:
using TKWF.Ext.Identity;
[TKWFEnabledExtension(typeof(IdentityExtensionInitializer<>))]
public class MyDomainInitializer : DomainHostInitializerBase<MyUserInfo> { ... }
声明后扩展三钩子(ConfigureServices/ConfigureFilters/InitializeAsync)自动接线。
依赖倒置(ADR48 D7)
扩展间依赖走 .Abstractions(接口/契约),不引用实现项目——L2 门控硬约束(TKWF0022 Error)。
Navigation → Permissions.Abstractions(✅ 合法)
Navigation → Permissions(❌ TKWF0022 Error)
快速开始
消费方引用扩展
NuGet 包模式(消费方推荐——扩展已发布 TKWF.Ext.* NuGet 包):
<PackageReference Include="TKWF.Ext.Identity" Version="0.3.3" />
源码模式(本仓库开发/联调主框架新 API 时):
<ProjectReference Include="..\_TKWF.Extensions\_Framework\Identity\TKWF.Ext.Identity.csproj" />
双模式并存:扩展自身构建用 PackageReference(主框架包);需调试主框架源码新 API 时可临时切源码引用——消费方视角与 NuGet 模式一致。
启用 + 使用
// 1. 白名单声明(v4.9.85+)
[TKWFEnabledExtension(typeof(IdentityExtensionInitializer<>))]
public class MyDomainInitializer : DomainHostInitializerBase<MyUserInfo> { ... }
// 2. 注入 + 使用
public class AuthService(IUserManager userManager)
{
public async Task<UserEntity?> LoginAsync(string name, string password)
=> await userManager.VerifyCredentialsAsync(name, password);
}
版本管理
MinVer:各扩展包独立版本(git tag 命名空间前缀 + csproj MinVerTagPrefix 对齐,如 Identity/v0.3.2 → 0.3.2)
公共内容(构建基建/无扩展归属):无前缀 v tag(如 v0.8.2)
机制:
- 每个扩展 csproj 设 <MinVerTagPrefix>{扩展名}/v</MinVerTagPrefix>——MinVer 只匹配该扩展自己的前缀 tag,
各扩展版本完全独立(Permissions 0.9.x 与 Identity 0.3.x 互不影响)
- 扩展 tag 命名:{扩展名}/v{major}.{minor}.{patch}(如 Permissions/v0.9.0、Notifications/v0.3.0)
- 公共内容(Directory.Build.props/构建脚本等无扩展归属的变更):打无前缀 v tag(既有 v0.1.0~v0.8.2)
- 契约包(*.Abstractions)独立 tag:Account.Abstractions/v0.1.0 等,版本与主扩展独立演进
- 与主框架 _TKWF 版本完全独立
Tag 纪律:必须有开发方案 + 审核报告,且征得用户同意
版本一览表口径(2026-10-26 固化,转达登记):
- 发布事实源 = git tag({Package}/vX.Y.Z 前缀,按包取最新);本表"版本"列填已发布 tag 版本
- 打 tag 后必须同步本表(+ _Framework/{扩展名}/README.md + docs/变更记录.md),防止展示层滞后
- 功能线领先于已发布 → 双值写法:Vx.y.z(功能线)/已发布 vA.B.C(实例:AuthCenter V0.12.0(功能线)/已发布 v0.10.1)
- 发布检查清单与详细约定见 docs/目录结构与版本管理规则.md §3.2/§3.3
扩展规划
- P0(必须):11/11 全部完成 ✅——Identity / Account / Navigation / AuditLogging / Settings / BlobStoring / Emailing / DataDictionary / Tagging / PrintTemplates + Permissions(V0.9.0)。注:Tagging 标签算法已按 ADR52 回归主框架
TKW.Framework.Utility.Tags,扩展保留存储层。 - P1(推荐):20 扩展已实施(后台任务/功能管理/通知+SignalR/限流/健康检查/安全日志/组织单元/文件管理/审批/导入导出/日历/仪表盘/打印模板/指标/标签存储/数据字典/用户中心/多因素认证/分析服务);剩余 14 项按需推进(OpenIddict/SSO/LDAP/后台服务/安全防护/媒体库/搜索/动态表单/动态字段/工作流/文本模板/报表/文档管理/ApiDocs)。
- P2(待定):20 项全部按需启用(CMS/支付/订阅/聊天/GraphQL/可观测性/数据分析BI 等)。
NuGet 发布(2026-09-15 + 2026-10-06 增量)
- 30 包已发布 nuget.org(
TKWF.Ext.*,v0.1.x–v0.9.x,依赖主框架稳定包 4.10.24)——经 GitHub Actions + Trusted Publishing(OIDC 免 API key:NuGet/login@v1+ nuget.org policy +NUGET_USERsecret)自动发布,CI run 34897984278 30/30 pushed 确认。 - 2026-10-06 增量发布(run 37439864527 + 37445400545 全绿,
AuthCenter/v0.8.0tag 移绿树 3038d40 触发):AuthCenter 0.8.0(stable)已上架 + AuthCenter.Abstractions 0.1.1-preview.0.19 / Federation 0.2.1-preview.0.12 首发 + 全部已发布扩展新 preview(--skip-duplicate幂等 no-op)。 - ✅
TKWF.Federation.*平台库(7 个)已全部发布(run 37445400545,0.1.1-preview.0.1——WeChat/DingTalk/Oidc/Google/Microsoft/WeCom/QQ;QQ 骨架 preview 首发,协议在 N3 V0.1.0 稳定版落地后将覆盖)。⚠️ 阻塞曾因 nuget.org Trusted Publishing 策略仅覆盖TKWF.Ext.*前缀(403 Forbidden)——用户已更新策略为TKW.*+TKWF.*全局前缀,权限更新后重触发补齐。Permissions.Validation(Analyzer)IsPackable=false不发布。 - 后续版本发布:各扩展打
{扩展名}/v{x.y.z}tag(patch bump 指向目标 commit)→ push tag 即触发 CI 全量重建 + 发布(--skip-duplicate 幂等)。 - ✅
TKWF.Ext.Federation主包已废弃并全量 unlist(2026-10-10)——10 版本(0.2.1-preview.0.12 ~ 0.5.0,含连接层壳版)已 unlist(nuget.org 搜索不可见、flatcontainer 保留兼容既有引用);消费方改引TKWF.Ext.TrustCenter新线 + 8 平台库TKWF.Federation.{平台}(保留不 unlist,2026-10-10 已发 v0.2.2 ×7 + Alipay v0.1.1)。 - ✅
TKWF.Ext.TrustCenterV0.1.0 已发布(2026-10-10:框架组 v4.10.70 并入SymmetricKeyProviderKeys.TrustCenter(C11 第 5 扩展边界)→ CPM 4.10.70 lockstep + 删过渡类 + 切主框架常量 → 全量 1913 用例 0 失败;TrustCenter/Abstractions/Federation v0.5.0/AuthCenter v0.9.2 四 tag + 8 平台库 tag 已发布 + CI 全绿 + nuget.org 实证上架)。 - ✅ V0.4.0 设计缺口修复 + ④ 契约包联动发布(2026-10-18,12 tag 全绿)——
WeChatOperations/v0.4.0(①②③ 设计缺口修复:客户端 DTO 生成链路根治 + 网关 REST 端点 + 总开关 DB 化)+Federation.Abstractions/v0.1.0(④ 新契约包首发——通道编排契约收口独立包)+Federation/v0.10.0(契约迁出后主包新版本)+ 8 平台库新版本(Federation.WeChat v0.5.0 / QQ v0.4.0 / DingTalk v0.4.0 / WeCom v0.4.0 / Oidc v0.3.0 / Google v0.3.0 / Microsoft v0.3.0 / Alipay v0.3.0——依赖拓扑切 Abstractions);逐个 tag push(多 tag 单命令会丢事件先例)→ 12 个 CI run 全部 success(含新契约包 Abstractions publish)。 - ✅ v4.10.76 HttpAuth 匿名端点排除机制收入(2026-10-15,ADR108)——主框架 v4.10.76(
HttpAuthenticationMiddleware锚点后移 AfterRouting 读端点IAllowAnonymous元数据——扩展声明AllowAnonymous即自动放行,消费方零配置;SG1b 生成器AllowAnonymous=true → .AllowAnonymous()+ 接口级 fallback)+ 扩展侧 CPM lockstep 4.10.76(12 包)+ 各 Web 扩展匿名端点自查零适配;消费方旧版手动HttpAuth.ExcludedPathPrefixes.Add("/feberation")冗余(保留无害);详见docs/HttpAuth匿名端点排除机制-开发方案.md。 - ✅ Federation 系列持续发布(2026-10-21~27,Iteration 2 关注域 + 微信测试反馈增强)——
Federation/v0.11.0~v0.15.0(I2 渠道关注关系域 + 复查修复 + 审核 P1/P2 + 测试端点 HTML 化)+Federation.Abstractions/v0.2.0~v0.5.0(I2 契约收口 + 联动 bump)+Federation.WeChat/v0.6.0~v0.16.1(明文模式 + 图文模板解析链 4 级 + 免登链接基址 +{text}占位符动态化)+WeChatOperations/v0.5.0~v0.6.1(I2-10 订阅统计派生改造 + 事件回复排他单模型)+Federation.WeChat.MessageGateway/v0.1.1;当前 55 包最新发布版本见docs/versions.json(build/gen-versions.ps1生成)。
设计思路与 ABP 兼容策略(最优设计为默认、兼容 ABP 为特殊需求、碰巧兼容只记录)+ 各扩展设计分类见
docs/扩展模块设计思路与ABP兼容策略.md;状态跟踪见主框架私有_TKWF/docs/03_扩展模块/总览和跟踪.md。
许可证
Copyright © 2026 LoongBa · Apache-2.0
开源、允许商用与闭源衍生,但必须保留版权与归属声明(Attribution)。
相关仓库
- TKW.Framework(主框架) — 领域框架 + 扩展机制(
TKWFExtensionAttribute+ExtensionInitializer三钩子 + SG1 发现 +[TKWFEnabledExtension]白名单启用 + 三层门控 ADR50) - LoongBa-Scaffold — 文档体系脚手架来源
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- TKWF.CodeGeneration.Abstractions (>= 4.10.87)
- TKWF.Domain (>= 4.10.87)
- TKWF.Utility (>= 4.10.87)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.2-preview.0.46 | 0 | 10/30/2026 |
| 0.1.2-preview.0.43 | 24 | 10/30/2026 |
| 0.1.2-preview.0.42 | 32 | 10/30/2026 |
| 0.1.1 | 64 | 10/27/2026 |
| 0.1.1-preview.0.298 | 37 | 10/27/2026 |
| 0.1.1-preview.0.295 | 57 | 10/26/2026 |
| 0.1.1-preview.0.287 | 49 | 10/26/2026 |
| 0.1.1-preview.0.286 | 43 | 10/25/2026 |
| 0.1.1-preview.0.285 | 48 | 10/25/2026 |
| 0.1.1-preview.0.280 | 50 | 10/24/2026 |
| 0.1.1-preview.0.278 | 54 | 10/24/2026 |
| 0.1.1-preview.0.248 | 50 | 10/21/2026 |
| 0.1.1-preview.0.245 | 49 | 10/21/2026 |
| 0.1.1-preview.0.239 | 54 | 10/20/2026 |
| 0.1.1-preview.0.228 | 50 | 10/20/2026 |
| 0.1.1-preview.0.227 | 46 | 10/20/2026 |
| 0.1.1-preview.0.220 | 50 | 10/18/2026 |
| 0.1.1-preview.0.218 | 47 | 10/17/2026 |
| 0.1.1-preview.0.209 | 50 | 10/17/2026 |
| 0.1.1-preview.0.208 | 48 | 10/17/2026 |