{"version":1,"pages":[{"id":"IMHBiFO7iFnkbXGq0h0I","title":"Zongsoft 开发框架","pathname":"/","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book-open","description":"Zongsoft 开发框架、宿主程序与工具链的中文文档中心。","breadcrumbs":[{"label":"Documentation","icon":"books"}]},{"id":"dnDgjQv2jFPw4qmFa9VW","title":"什么是 Zongsoft","pathname":"/overview/what-is-zongsoft","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"circle-info","description":"了解 Zongsoft 开源框架系列的组成、定位与适用场景。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"概览"}]},{"id":"r5JBNcgcICnGpfJxRZcx","title":"设计理念","pathname":"/overview/conception","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"lightbulb","description":"理解 Zongsoft 对公共契约、插件装配、显式元数据和部署组合的设计取舍。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"概览"}]},{"id":"5i9J0kBBc8rMlcUb2oG8","title":"架构总览","pathname":"/overview/architecture","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"diagram-project","description":"从依赖方向和运行流程理解 核心类库、插件、宿主与基础设施的职责。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"概览"}]},{"id":"xJrFfGTigKryTguTZ4LD","title":"基础概念与协作方式","pathname":"/overview/concepts","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"shapes","description":"区分宿主、插件、模块、服务、提供者、构件和四类元数据文件。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"概览"}]},{"id":"W18xChMa7LOngtHuNewi","title":"插件化","pathname":"/overview/pluginization","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"puzzle-piece","description":"Zongsoft 插件化应用的基本概念和运行方式。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"概览"}]},{"id":"hHzVPkQNypnNvx54g5s8","title":"为什么需要插件化","pathname":"/overview/pluginization/why-pluginization","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"puzzle-piece","description":"从复杂 SaaS 的支付、交易与设备协作出发，理解巨石应用的维护困境，以及分层、业务分块和插件装配带来的变化。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"概览"},{"label":"插件化","icon":"puzzle-piece"}]},{"id":"wTrQiNwRofvNvPkxNxFK","title":"从业务变化确定模块边界","pathname":"/overview/pluginization/business-boundaries","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"cubes","description":"先找业务变化，再划分模块：规则、装配、编译与交付各回答不同的问题。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"概览"},{"label":"插件化","icon":"puzzle-piece"}]},{"id":"jxsciTv03FV0HtYdjLNx","title":"让业务能力跨宿主复用","pathname":"/overview/pluginization/host-independent-business","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"arrows-split-up-and-left","description":"把业务动作留在服务里，让控制器、命令和后台入口共用同一套规则。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"概览"},{"label":"插件化","icon":"puzzle-piece"}]},{"id":"ZegReNgC96jTu6p2F2W4","title":"把扩展点设计成协作契约","pathname":"/overview/pluginization/extension-contracts","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"diagram-project","description":"扩展点由装配路径与行为约定共同构成，为过滤器、验证器和事件定义可维护的协作契约。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"概览"},{"label":"插件化","icon":"puzzle-piece"}]},{"id":"8txee5FjVGrew8v0TCol","title":"从局部改造到可验证的插件交付","pathname":"/overview/pluginization/evolutionary-delivery","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"route","description":"用可独立验收的业务切口渐进引入插件，让每一步都可运行、可观察、可回退。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"概览"},{"label":"插件化","icon":"puzzle-piece"}]},{"id":"bwexYAyOV75HXRsImBA6","title":"部署模型","pathname":"/overview/deployment","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"truck-ramp-box","description":"了解 Zongsoft 中部署、打包和升级的整体模型。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"概览"}]},{"id":"Y3ziGQjDWKQRjSPlc9Rf","title":"准备环境","pathname":"/get-started/prerequisites","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"list-check","description":"根据所选教程准备 SDK、工具和源码输出，区分包使用与框架源码开发。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"快速开始"}]},{"id":"J5WaM9A5kYZmm2oqDCAE","title":"安装包","pathname":"/get-started/install","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"download","description":"安装 Zongsoft 相关 NuGet 包和全局工具。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"快速开始"}]},{"id":"2UoUUwApzZod5JRVRX4w","title":"选择宿主程序","pathname":"/get-started/hosting","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"server","description":"根据调试、服务运行和 Web API 场景选择合适的 Zongsoft 宿主程序。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"快速开始"}]},{"id":"FZiGCjee6QoD0fJgfHdH","title":"部署第一个插件","pathname":"/get-started/deploy-first-plugin","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"rocket","description":"沿 hosting 已有方案部署 Discussions 领域与 Web 插件。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"快速开始"}]},{"id":"QdBbEdQYpTV5iCrrZWrg","title":"编写第一个业务插件","pathname":"/get-started/first-business-plugin","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"puzzle-piece","description":"从 Discussions 已有模块理解业务模型、服务注册、插件清单和交付产物。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"快速开始"}]},{"id":"8tigfju5KuqUmdfXlndR","title":"运行与调试","pathname":"/get-started/run-and-debug","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"bug","description":"按进程、插件、配置、服务和业务调用逐层定位运行问题。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"快速开始"}]},{"id":"4oeIFCg5e8jt2O2y4Xc0","title":"核心类库","pathname":"/framework/core","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"cube","description":"Zongsoft.Core 核心类库的职责和主要命名空间。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"Wf1L5lUlXbPfhjXS2SpX","title":"Zongsoft.Caching","pathname":"/framework/core/caching","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"Zongsoft.Caching 命名空间的职责和主要类型。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"DOLPvq3sqgQXKz6garMU","title":"缓存","pathname":"/framework/core/caching/memory-cache","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"MemoryCache 进程内缓存、过期策略、依赖令牌和淘汰事件。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Caching","icon":"database"}]},{"id":"SXmTQxWdiqCYkIfe191S","title":"缓冲器","pathname":"/framework/core/caching/spooler","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"layer-group","description":"从框架日志实现和现有测试理解批量缓冲、触发条件、并发刷新与数据消费。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Caching","icon":"database"}]},{"id":"WBQty9KHgcuuY9XAfocI","title":"Zongsoft.Collections","pathname":"/framework/core/collections","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"list-tree","description":"Zongsoft.Collections 命名空间的职责和主要类型。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"OYazPDInHv2Y5bAr3sGw","title":"分层类","pathname":"/framework/core/collections/category","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"list-tree","description":"Category 分类树及 CategoryBase、CategoryCollection、CategoryCollectionBase 的用法。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Collections","icon":"list-tree"}]},{"id":"L0LKMbvFkohTnXqkKMvc","title":"层次化","pathname":"/framework/core/collections/hierarchical","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"code-branch","description":"Hierarchical 层级节点、节点集合、路径查找和层级表达式。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Collections","icon":"list-tree"}]},{"id":"I1H7miQAtuC3GjvdcY6W","title":"参数集","pathname":"/framework/core/collections/parameters","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"sliders","description":"Parameters 参数包、类型键、字符串键、链式构建和 JSON 序列化。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Collections","icon":"list-tree"}]},{"id":"Wjtj6JL1BhrbIy3JgT6Z","title":"同步集合","pathname":"/framework/core/collections/synchronized","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"shield","description":"SynchronizedList 和 SynchronizedDictionary 同步集合。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Collections","icon":"list-tree"}]},{"id":"S5a8DHL6Dj09DADK9Zxw","title":"集合扩展","pathname":"/framework/core/collections/extensions","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"wrench","description":"Enumerable、CollectionUtility、DictionaryUtility 以及集合扩展方法。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Collections","icon":"list-tree"}]},{"id":"LNITigawB3V8rspDqx1m","title":"Zongsoft.Common","pathname":"/framework/core/common","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"wrench","description":"Zongsoft.Common 命名空间的职责和主要类型。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"xacRZf7w5SPUxM1zPn4b","title":"聚合异常","pathname":"/framework/core/common/aggregate-exception-utility","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"circle-info","description":"AggregateExceptionUtility 聚合异常处理工具。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"FeZvwiuz3JHkELjJUzHA","title":"注解工具","pathname":"/framework/core/common/annotation-utility","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book","description":"AnnotationUtility 成员注解读取工具。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"glLHD0qGrDIQxyqJSCvr","title":"位向量","pathname":"/framework/core/common/bit-vector","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"code","description":"BitVector32 和 BitVector64 位标记结构。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"qFoqrvYnDhYK5atLA03g","title":"缓冲工具","pathname":"/framework/core/common/buffer","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"code","description":"Buffer 内存租赁、编码解码和二进制读取工具。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"oP0PYQ3N7I8m4UFoY3vP","title":"校验码","pathname":"/framework/core/common/checksum","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"shield","description":"Checksum 校验和结构的计算、解析和验证。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"jsoGAJgPVFwjYFADtlen","title":"类型转换","pathname":"/framework/core/common/convert","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"code","description":"Convert 类型转换和十六进制转换工具。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"aV8VGpDtTqOxiv3VtQlY","title":"枚举工具","pathname":"/framework/core/common/enum-utility","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"list-check","description":"EnumUtility 和 EnumEntry 枚举元数据工具。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"z02n2zT6vla2hgRiXCXA","title":"分层向量","pathname":"/framework/core/common/hierarchy-vector32","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"code-branch","description":"HierarchyVector32 四级层级编码结构。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"v8zn5ZwfSoP2jwZ4vDyy","title":"异步锁","pathname":"/framework/core/common/locker","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"shield","description":"Locker 同步和异步互斥锁。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"XOKHgEQ8XFLHRGfnolAV","title":"通知","pathname":"/framework/core/common/notification","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"message","description":"Notification 变更令牌工具。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"If0AXIHggCOm5klxHZaS","title":"操作异常","pathname":"/framework/core/common/operation-exception","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"circle-info","description":"OperationException 操作异常。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"bQ9URCzI0h2yustE9xVi","title":"断言","pathname":"/framework/core/common/predication","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"circle-check","description":"从安全模块事件与日志过滤说明可组合的条件断言。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"IhCmIr73vpbBApGPtK8c","title":"随机器","pathname":"/framework/core/common/randomizer","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"shuffle","description":"以 Discussions 的正文文件名说明随机字符串的真实用途。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"6r6FuaYbU2roL22wNcWL","title":"序号器","pathname":"/framework/core/common/sequence","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"arrow-up-1-9","description":"以 Discussions 映射中的外部序号和站点分域说明生成责任。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"uUsCCLpWHtNQwE363VvR","title":"计时器","pathname":"/framework/core/common/timer","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"clock","description":"通过框架已有 TimerTest 理解周期回调、取消、停止与释放。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"eIhunL3NLi3Z8m5t6HR1","title":"时间戳","pathname":"/framework/core/common/timestamp","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"clock","description":"以 Discussions 附件命名理解纪元与经过时间。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"5hrpSHIXD4drHhJ88hEe","title":"验证器","pathname":"/framework/core/common/validator","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"clipboard-check","description":"从框架安全模块的密码策略验证器理解结果、失败信息和调用上下文。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"To3q2Rbaa6QcRxSLoxvW","title":"类型别名","pathname":"/framework/core/common/type-alias","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book","description":"TypeAlias 类型别名、泛型类型、可空类型和数组类型解析。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"KZLZrEeGLBrCJpCeAB8i","title":"常用扩展","pathname":"/framework/core/common/extensions","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"wrench","description":"ArrayExtension、StringExtension、DateTimeExtension、TimeSpanUtility、TypeExtension、UriExtension 常用扩展。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"Xqemj6VnYaHkP3iPupYh","title":"Zongsoft.Communication","pathname":"/framework/core/communication","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"radio","description":"Zongsoft.Communication 命名空间的职责和主要类型。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"Kcnu1R6lYEX1F6ftO1JD","title":"常规通讯","pathname":"/framework/core/communication/general","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"satellite-dish","description":"ISender、IReceiver、Listener、Channel 和 IPacketizer 常规通讯抽象。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Communication","icon":"radio"}]},{"id":"Omap1VF7cFEbzTJPiatg","title":"请求应答","pathname":"/framework/core/communication/request-response","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"right-left","description":"IRequest、IRequester 和 IResponse、IResponder 请求应答抽象。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Communication","icon":"radio"}]},{"id":"tSUoTKGplLWOJlORKhcZ","title":"通知器","pathname":"/framework/core/communication/notifier","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"bell","description":"INotifier 通知激发器接口和实现状态。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Communication","icon":"radio"}]},{"id":"VQiH92Y7nWmnRqtJMsft","title":"发射器","pathname":"/framework/core/communication/transmitter","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"paper-plane","description":"ITransmitter、TransmitterDescriptor、TransmitterHandler 和模板通知发送。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Communication","icon":"radio"}]},{"id":"jmD2GODQVJTgdgNjp97D","title":"Zongsoft.Components","pathname":"/framework/core/components","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"cubes","description":"Zongsoft.Components 命名空间及其子命名空间的职责。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"qLyxhx9CTvF9rLDEYmYK","title":"标识","pathname":"/framework/core/components/identifier","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"fingerprint","description":"从 Discussions 用户身份理解类型和值共同组成的标识。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"kuhDT3kmyJq5FZdp1meF","title":"别名","pathname":"/framework/core/components/alias-attribute","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"tag","description":"Zongsoft.Components AliasAttribute 别名声明和读取。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"NrKxcv3CuzLXR9b1lXTf","title":"命令","pathname":"/framework/core/components/commands","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"terminal","description":"以 Discussions 的 MessageSendCommand 理解参数、选项、服务依赖和执行。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"rKHVpLUWDr2VyxICYgZI","title":"事件","pathname":"/framework/core/components/events","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"bolt","description":"从 Discussions 的事件注册表入口理解模块事件的装配边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"15L7VFnIsDKrIoa2yS4y","title":"工作器","pathname":"/framework/core/components/worker","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"person-running","description":"Zongsoft.Components Worker 工作器模型与工作器命令。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"61JvUuyp3OH2sb7yiq7F","title":"处理器","pathname":"/framework/core/components/handler","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"hand-pointer","description":"Zongsoft.Components Handler 处理器抽象、定位和选择。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"Oienf61CyTMOdYqHlkIm","title":"过滤器","pathname":"/framework/core/components/filter","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"filter","description":"从 Discussions 查询后正文处理理解过滤器时机、生命周期与权限。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"LLnzkjXB8Qi54nIkH53M","title":"监视器","pathname":"/framework/core/components/superviser","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"eye","description":"采用框架 SuperviserTest 的真实对象与并发测试说明监测生命周期。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"9q6QpsJfcyY8fKVlzcOD","title":"均衡器","pathname":"/framework/core/components/weighter","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"scale-balanced","description":"Zongsoft.Components Weighter 平滑加权轮询选择器。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"5iBwHmkUC7wKGW4jg1e8","title":"鉴别器","pathname":"/framework/core/components/discriminator","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"tags","description":"Zongsoft.Components Discriminator 识别器和插件构件装配。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"cJvI9NGzcV4mVKlw5176","title":"尝试器","pathname":"/framework/core/components/attempter","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"shield-halved","description":"Zongsoft.Components Attempter 失败尝试统计和锁定窗口。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"A2yqKYfguiWh62oyLZ7R","title":"转换器","pathname":"/framework/core/components/converters","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"repeat","description":"Zongsoft.Components.Converters 常用类型转换器。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"vnJK16NlYQokouWsjHwg","title":"状态机","pathname":"/framework/core/components/states","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"code-branch","description":"结合 Discussions 的状态动作与框架状态机实现理解迁移、处理器和完成阶段。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"R4UMijL7CJ68ljysEfJb","title":"执行管线","pathname":"/framework/core/components/executor","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"bolt-lightning","description":"Zongsoft.Components Executor 执行器、上下文、Feature 特性和执行管线。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"cH7URqztmFQLQYLyFS7i","title":"Zongsoft.Configuration","pathname":"/framework/core/configuration","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"sliders","description":"从 Discussions 选项读取出发，理解配置源、对象绑定、连接设置、Profile、Models 和 Options。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"MCbvsQellrl5XPeffCPL","title":"Zongsoft.Data","pathname":"/framework/core/data","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"Zongsoft.Data 命名空间及其子命名空间在核心类库中的职责。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"bXbF5sRZT0vzpUuuEta8","title":"Transactions","pathname":"/framework/core/data/transactions","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"rotate","description":"Zongsoft.Data.Transaction 类与 Zongsoft.Data.Transactions 命名空间的职责和主要类型。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Data","icon":"database"}]},{"id":"lO0nHBLM5pr4j9R00ec7","title":"Zongsoft.Diagnostics","pathname":"/framework/core/diagnostics","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"stethoscope","description":"采用 Hangfire 处理器和框架日志测试说明日志入口、上下文与落盘。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"AEtH5QkIHzPROOpfdSDG","title":"Telemetry","pathname":"/framework/core/diagnostics/telemetry","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"chart-line","description":"从框架安全模块的真实认证指标理解计量器、仪表、标签和导出。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Diagnostics","icon":"stethoscope"}]},{"id":"dVadt80fQO8CXM90IDqk","title":"Zongsoft.Expressions","pathname":"/framework/core/expressions","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"code","description":"Zongsoft.Expressions 的表达式求值抽象、词法分析器、token 模型和 tokenizer 扩展方式。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"I68QIXXlPqhafwx0AGd0","title":"Zongsoft.IO","pathname":"/framework/core/io","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"folder-tree","description":"以 Discussions 长正文与附件上传说明虚拟文件系统和路径。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"mqpGuMDRJJ4JBwmwAMGY","title":"Zongsoft.Messaging","pathname":"/framework/core/messaging","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"message","description":"Zongsoft.Messaging 的消息队列抽象、确认模型、配置发现和守护订阅机制。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"1w3BcuUyukFJE9ybjthj","title":"Zongsoft.Reflection","pathname":"/framework/core/reflection","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"magnifying-glass","description":"Zongsoft.Reflection 的反射访问、动态访问器和成员表达式求值能力。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"YQnWHqKocZgpYNtMPPea","title":"Zongsoft.Resources","pathname":"/framework/core/resources","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book","description":"以 Discussions 的资源键和框架现有测试说明本地化资源、定位回退与组件标题。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"xyxJAA5qu56jX2mfwNCm","title":"Zongsoft.Scheduling","pathname":"/framework/core/scheduling","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"calendar","description":"以框架 Hangfire 样例串联调度契约、处理器和宿主生命周期。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"yAAz6UHt7XOk4gQwnavQ","title":"Zongsoft.Security","pathname":"/framework/core/security","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"shield","description":"Zongsoft.Core 中 Zongsoft.Security 命名空间的声明身份、凭证、密钥、验证码与安全基础模型。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"9SLQKTKyGXD0RznWzMni","title":"Privileges","pathname":"/framework/core/security/privileges","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"user-shield","description":"Zongsoft.Core 中 Zongsoft.Security.Privileges 的权限模型、认证器、授权器和默认实现。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Security","icon":"shield"}]},{"id":"0310KszsvJkuzJxfjo1Z","title":"Zongsoft.Serialization","pathname":"/framework/core/serialization","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"brackets-curly","description":"从 Discussions 用户归档筛选与模型属性理解序列化边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"xdStvhSWKaWHymkFjbza","title":"Zongsoft.Services","pathname":"/framework/core/services","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"server","description":"理解 Zongsoft.Services 的应用上下文、服务注册、服务解析和插件服务发现。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"FRa0Xbz73vPA33p4nN7j","title":"服务定位与所有权","pathname":"/framework/core/services/locating","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"magnifying-glass","description":"从 Discussions 服务之间的依赖解释定位范围与生命周期。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Services","icon":"server"}]},{"id":"mvfekzbnDBLogYF2HnNr","title":"分布式锁","pathname":"/framework/core/services/distributed-lock","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"lock","description":"通过 Redis 多进程范例理解锁竞争、租约、续期、栅栏令牌与失去所有权后的处理。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Services","icon":"server"}]},{"id":"Iw5YKZREqdjl1z1kHSbS","title":"Zongsoft.Terminals","pathname":"/framework/core/terminals","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"terminal","description":"Zongsoft.Terminals 终端抽象、命令执行器和交互式控制台程序。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"aOa4eJOaKjQ3n3jDHYZw","title":"终端","pathname":"/framework/core/terminals/terminal","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"terminal","description":"Zongsoft.Terminals 终端抽象、控制台终端和交互式命令模式。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Terminals","icon":"terminal"}]},{"id":"tLciVmw9cws1Cb9VhBYO","title":"命令","pathname":"/framework/core/terminals/commands","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"keyboard","description":"Zongsoft.Terminals.Commands 终端内置命令。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"},{"label":"Zongsoft.Terminals","icon":"terminal"}]},{"id":"6JLRLh7PN3cDm0lNttGs","title":"Zongsoft.Text","pathname":"/framework/core/text","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"font","description":"Zongsoft.Text 文本模板接口、正则验证器和常用文本匹配用法。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"fQjHFayxX2gdMMX0S4Re","title":"Zongsoft.Versioning","pathname":"/framework/core/version","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"code-commit","description":"Zongsoft.Versioning 命名空间中的语义化版本与数值版本号。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"核心类库","icon":"cube"}]},{"id":"FPrgP2filHmlahb7OI2M","title":"插件框架","pathname":"/framework/plugins","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"puzzle-piece","description":"Zongsoft.Plugins 插件框架的职责和核心概念。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"NdjhcSKIthDrGUONtDaV","title":"插件应用模型","pathname":"/framework/plugins/application-model","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"sitemap","description":"理解插件式应用中的宿主、应用上下文、模块和服务。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"插件框架","icon":"puzzle-piece"}]},{"id":"f9kQtLlyX77jazHogmpe","title":"插件文件与加载","pathname":"/framework/plugins/plugin-file","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"puzzle-piece","description":"以 Discussions 清单解释程序集、依赖、扩展路径与构件。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"插件框架","icon":"puzzle-piece"}]},{"id":"zIRkihdlclGXuSrN1cTL","title":"宿主集成","pathname":"/framework/plugins/hosting","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"power-off","description":"在 .NET Host 中启动插件式应用并加载插件目录。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"插件框架","icon":"puzzle-piece"}]},{"id":"stFHzPGd69mmK1UIcNEU","title":"构件与服务","pathname":"/framework/plugins/builtins-and-services","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book-open","description":"从 Discussions 模块实例、验证器和命令依赖理解插件构件与容器服务。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"插件框架","icon":"puzzle-piece"}]},{"id":"lFVjejxwwbAtjc6oQxyQ","title":"数据引擎","pathname":"/framework/data","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"Zongsoft.Data 数据引擎的设计目标、能力和阅读入口。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"YGtcpeRxUthRH54YZBBy","title":"对象关系与数据访问","pathname":"/framework/data/concepts","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"diagram-project","description":"理解对象关系映射、实体、导航、数据形状、访问器与数据库驱动的协作。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"SciwEvyjpuzuB4xlKgIW","title":"完成首次数据查询","pathname":"/framework/data/quickstart","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"play","description":"沿 Discussions 论坛查询核对映射、身份、连接和结果。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"vBMP7xLOrE93myEE3n4W","title":"数据模式","pathname":"/framework/data/schema","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"brackets-curly","description":"从用户归档、浏览记录和主题审核理解 schema 对字段与导航的控制。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"TZ7VrUBSxyhXkQ443XSd","title":"映射文件","pathname":"/framework/data/mapping","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"table","description":"以 Discussions 的论坛复合键、主题正文关系和序号配置解释映射。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"okDQNnF7Ub9r1A5deDVY","title":"连接配置","pathname":"/framework/data/connections","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"配置数据连接、驱动和读写分离。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"fxkoGuzFwJpwdco6BTrD","title":"数据访问接口","pathname":"/framework/data/data-access","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book-open","description":"以 Discussions 模块访问器和真实服务调用解释访问器、结果生命周期与业务边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"qoIfeke8ssEKl72rDGEq","title":"条件与操作元","pathname":"/framework/data/conditions-and-operands","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book-open","description":"从版主审核与浏览量递增理解条件组合和数据库端表达式。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"20jsAvLuXT0dmQfqv3uo","title":"查询与导航","pathname":"/framework/data/querying","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book-open","description":"以论坛置顶主题、浏览记录和投票统计说明条件、模式、分页与聚合。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"JYpH4ruWnN3DL7Dg9MUx","title":"写入操作","pathname":"/framework/data/writing","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book-open","description":"以帖子投票、主题审核和浏览记录说明真实写入及其副作用。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"EKlzE7hH9qQTdRXqv24X","title":"事务与一致性","pathname":"/framework/data/transactions","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book-open","description":"从发表主题与更新统计理解事务边界、提交和外部副作用。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"WHeDcy0wbW9ToQGwkiGS","title":"数据服务","pathname":"/framework/data/services","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book-open","description":"通过 ThreadService、DataValidator 和查询过滤器理解业务服务边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"UWZab2cpmLjNJd0dDlb2","title":"按驱动阅读","pathname":"/framework/data/drivers","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"hard-drive","description":"选择、部署和扩展 Zongsoft.Data 数据库驱动。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"}]},{"id":"BB7sjaSDiAVwa7LvnuiX","title":"MySQL (mysql)","pathname":"/framework/data/drivers/mysql","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"MySQL 数据驱动的部署、连接配置与专项验证。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"},{"label":"按驱动阅读","icon":"hard-drive"}]},{"id":"wW1nPSuutc4M6f0SwUbD","title":"SQL Server (mssql)","pathname":"/framework/data/drivers/mssql","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"SQL Server 数据驱动的部署、连接配置与专项验证。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"},{"label":"按驱动阅读","icon":"hard-drive"}]},{"id":"HHbFB2xuzn9oyEsVebO4","title":"PostgreSQL (postgres)","pathname":"/framework/data/drivers/postgres","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"PostgreSQL 数据驱动的部署、连接配置与专项验证。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"},{"label":"按驱动阅读","icon":"hard-drive"}]},{"id":"Jq7bRjaIDgfDEERcBLmU","title":"SQLite (sqlite)","pathname":"/framework/data/drivers/sqlite","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"SQLite 数据驱动的部署、连接配置与专项验证。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"},{"label":"按驱动阅读","icon":"hard-drive"}]},{"id":"jppj906IuQ5VuSttL9z2","title":"DuckDB (duckdb)","pathname":"/framework/data/drivers/duckdb","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"DuckDB 数据驱动的部署、连接配置与专项验证。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"},{"label":"按驱动阅读","icon":"hard-drive"}]},{"id":"TwDcF4aA1eTE9Nhr3wXB","title":"ClickHouse (clickhouse)","pathname":"/framework/data/drivers/clickhouse","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"ClickHouse 数据驱动的部署、连接配置与专项验证。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"},{"label":"按驱动阅读","icon":"hard-drive"}]},{"id":"N7vdCC0ouVL17ZhRSjm9","title":"TDengine (tdengine)","pathname":"/framework/data/drivers/tdengine","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"TDengine 数据驱动的部署、连接配置与专项验证。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"},{"label":"按驱动阅读","icon":"hard-drive"}]},{"id":"ydSgA0nkyoCcisr2ODCK","title":"InfluxDB (influx)","pathname":"/framework/data/drivers/influx","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"InfluxDB 数据驱动的部署、连接配置与专项验证。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"数据引擎","icon":"database"},{"label":"按驱动阅读","icon":"hard-drive"}]},{"id":"6YCEpDIj8z9FkfA5aQ09","title":"Web 基础","pathname":"/framework/web","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"globe","description":"以插件组织 ASP.NET Core 应用，连接控制器、数据服务、请求管线和协议扩展。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"HXjHS3EWdpscTDcATxoS","title":"部署控制器插件","pathname":"/framework/web/controllers","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"构建并部署 Discussions Web 类库，检查控制器发现和请求前提。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"Web 基础","icon":"globe"}]},{"id":"evaeiwPyngSz6S5YKYhp","title":"请求与数据服务接口","pathname":"/framework/web/data-services","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"route","description":"以 Discussions 的主题审核控制器说明 Web 与业务服务的分工。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"Web 基础","icon":"globe"}]},{"id":"8behssRjNxbJVgrAWcdJ","title":"OpenAPI 与 gRPC","pathname":"/framework/web/protocols","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"network-wired","description":"为插件 Web 应用启用 OpenAPI/Scalar 与 gRPC，区分文档生成、服务注册和实际协议端点。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"Web 基础","icon":"globe"}]},{"id":"8wPQSeUjvuxvdEt0vkYk","title":"安全","pathname":"/framework/security","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"shield-halved","description":"连接 核心类库 安全契约、持久化身份权限、Web 接口与验证码，建立完整的安全调用链。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"tkqhQ1h7idHj0u8Z86zO","title":"认证与授权","pathname":"/framework/security/authentication","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"shield-halved","description":"从 Discussions 的身份质询、声明转换和 SiteId 验证理解认证边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"安全","icon":"shield-halved"}]},{"id":"Qf3l0C6FxKl3DEG4GaT9","title":"验证码与确认令牌","pathname":"/framework/security/captcha","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"fingerprint","description":"使用 Authencode 图片挑战和短期确认令牌，理解两阶段核验、缓存及重放边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"安全","icon":"shield-halved"}]},{"id":"32Jqj6SMjJpDCx2WDIMF","title":"诊断","pathname":"/framework/diagnostics","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"stethoscope","description":"以框架随包选项说明指标与追踪的过滤和导出配置。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"FaaSOOAx5vxLfEOrfmQy","title":"OTLP 协议接入","pathname":"/framework/diagnostics/otlp","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"satellite-dish","description":"接入 OTLP gRPC 客户端和 Listener 服务端，核对处理器装配、数据转换及可靠性限制。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"诊断","icon":"stethoscope"}]},{"id":"Ggx7tBLIh4GWmpTJo4fc","title":"智能化","pathname":"/framework/intelligences","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"brain","description":"配置 AI 助手，连接模型服务，并通过终端或 Web 使用聊天能力。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"ukErbhLpZJO8SdI0xsnG","title":"会话与流式响应","pathname":"/framework/intelligences/sessions","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"comments","description":"理解聊天历史、流式枚举、会话隔离和中断后的状态。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"智能化","icon":"brain"}]},{"id":"SR1cuslqyf6oZoS3wGVy","title":"机器学习","pathname":"/framework/learning","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"graduation-cap","description":"认识机器学习模块的数据集、估计器目录与训练管线，以及当前实现范围。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"FjdBsXHBJmXNUFpXADFp","title":"网络通讯","pathname":"/framework/net","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"network-wired","description":"使用网络通讯组件时理解 TCP 分包、处理器生命周期和资源所有权。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"cyllcRKl8Otobs1OWiHh","title":"硬件信息","pathname":"/framework/hardwares","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"microchip","description":"采集当前运行环境的硬件信息，并理解设备标识的稳定性与使用范围。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"er03GejdbMfBNOXr4ZMi","title":"报表","pathname":"/framework/reporting","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"file-chart-column","description":"组织报表描述、模板资源与数据加载，并辨别报表契约和具体引擎的能力。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"qOQSUF1Oki455qCC8qL6","title":"消息队列","pathname":"/framework/messaging","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"message","description":"Zongsoft 消息队列插件的选型、配置、实现差异和使用范例。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"VAxT8YJqzYrp7eONLNiA","title":"发布订阅与投递概念","pathname":"/framework/messaging/concepts","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"envelopes-bulk","description":"从消息、主题、消费者到确认与幂等，理解统一接口背后的不同投递模型。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"消息队列","icon":"message"}]},{"id":"RG1e98fHIkSagMPpVLZb","title":"可靠投递与消息存储","pathname":"/framework/messaging/reliability","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"shield-check","description":"核对消息接纳与确认的边界，为 ZeroMQ 配置数据库存储并设计业务幂等。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"消息队列","icon":"message"}]},{"id":"uUoHkeLOqiy3jZ0rBHvS","title":"按项目阅读","pathname":"/framework/messaging/projects","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"folders","description":"按 Kafka、RabbitMQ、MQTT、ZeroMQ 与 .storages 源码项目查找消息实现。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"消息队列","icon":"message"}]},{"id":"cbzs1lqmZFNWkl8kYqDi","title":"Kafka (kafka)","pathname":"/framework/messaging/projects/kafka","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"message","description":"Kafka 消息项目的部署、连接、协议映射与可靠性边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"消息队列","icon":"message"},{"label":"按项目阅读","icon":"folders"}]},{"id":"Tjd0SKdxPRffrz42ZdZU","title":"RabbitMQ (rabbit)","pathname":"/framework/messaging/projects/rabbit","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"message","description":"RabbitMQ 消息项目的部署、连接、协议映射与可靠性边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"消息队列","icon":"message"},{"label":"按项目阅读","icon":"folders"}]},{"id":"I1OcIdKYQ4nce6XOpJaM","title":"MQTT (mqtt)","pathname":"/framework/messaging/projects/mqtt","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"message","description":"MQTT 消息项目的部署、连接、协议映射与可靠性边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"消息队列","icon":"message"},{"label":"按项目阅读","icon":"folders"}]},{"id":"Ffp1cpKeiFVMLqFHFfoy","title":"ZeroMQ (zero)","pathname":"/framework/messaging/projects/zero","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"message","description":"ZeroMQ 消息项目的部署、连接、协议映射与可靠性边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"消息队列","icon":"message"},{"label":"按项目阅读","icon":"folders"}]},{"id":"4wiVMzvP2TGgZ8Si2GqL","title":"消息存储 (.storages)","pathname":"/framework/messaging/projects/storages","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":".storages 数据库消息存储项目的部署产物、Broker 连接匹配与恢复条件。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"消息队列","icon":"message"},{"label":"按项目阅读","icon":"folders"}]},{"id":"uAAE8L4sqhY1ibRxwSpD","title":"自动升级","pathname":"/framework/upgrading","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"rotate","description":"理解升级包、发现通道、应用内升级器与进程外部署器的协作。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"5m6PVDh8LHb15THDul1X","title":"升级接入与故障恢复","pathname":"/framework/upgrading/workflow","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"stairs","description":"配置升级发现与部署交接，验证发布状态，并按阶段定位升级失败。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"自动升级","icon":"rotate"}]},{"id":"zWWo00fQauMS7dESj47F","title":"扩展插件","pathname":"/framework/externals","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug-circle-bolt","description":"按应用场景选择第三方适配器，理解公共契约、插件部署和外部运行环境的关系。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"}]},{"id":"uWPE8ZU34VOyZ71Bq8jd","title":"缓存与分布式协作","pathname":"/framework/externals/caching","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"database","description":"配置 Redis 缓存、etcd 序号与租约锁，并理解 Garnet 服务器和可靠消息存储。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"}]},{"id":"n0XLPu3GfigvcddICWVM","title":"脚本与表达式","pathname":"/framework/externals/scripting","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"code","description":"通过表达式契约选择 Lua、Python 或 Scriban，并管理语法、变量和运行时隔离。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"}]},{"id":"589wl26QUePXZA8oKZwE","title":"任务调度与弹性执行","pathname":"/framework/externals/execution","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"calendar-check","description":"通过框架 Hangfire 样例说明处理器注册、作业执行和重试边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"}]},{"id":"Pp5M60MDlWmtuxoHKTOI","title":"表格与模板扩展","pathname":"/framework/externals/documents","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"table","description":"以 Discussions 用户归档提供者和 user-list.xlsx 解释模板数据装配。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"}]},{"id":"N8DaCiq7TbjbYQJm64WR","title":"云服务与回调","pathname":"/framework/externals/cloud","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"cloud","description":"接入对象存储、云通信与微信服务，并正确处理回调验证和重复通知。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"}]},{"id":"g5CR7Dh7IfwpvFWJJB8Y","title":"OPC UA 设备协议","pathname":"/framework/externals/integration","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"理解 OPC UA 的节点、会话、订阅与证书，并规划工业设备接入。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"}]},{"id":"MgqSlUTjbyHzJsK3xHxg","title":"按项目阅读","pathname":"/framework/externals/projects","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"folders","description":"按 externals 源码项目查找扩展包、配置入口与相关主题文档。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"}]},{"id":"V8kKUAEHF9TAOOHlGyTU","title":"Aliyun (aliyun)","pathname":"/framework/externals/projects/aliyun","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Aliyun 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"833Wk4UiFDCG9u1mHM4j","title":"Amazon (amazon)","pathname":"/framework/externals/projects/amazon","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Amazon 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"aSFX3MmqIaxdpfI0AXlb","title":"ClosedXml (closedxml)","pathname":"/framework/externals/projects/closedxml","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"ClosedXml 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"ttNv45A69JSnYfUPV9z9","title":"Etcd (etcd)","pathname":"/framework/externals/projects/etcd","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Etcd 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"BfTkxkjpWescrCl4fTQr","title":"Garnet (garnet)","pathname":"/framework/externals/projects/garnet","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Garnet 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"DgNqkN7CCJuH52cXeZVq","title":"Hangfire (hangfire)","pathname":"/framework/externals/projects/hangfire","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Hangfire 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"Q3djc9aZAFHqxDKoDJPr","title":"Lua (lua)","pathname":"/framework/externals/projects/lua","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Lua 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"eUKx0UNf9EuDFrejlna1","title":"Opc (opc)","pathname":"/framework/externals/projects/opc","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Opc 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"Rp8Ps4Aopz8R7gtzjqlb","title":"OpenXml (openxml)","pathname":"/framework/externals/projects/openxml","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"OpenXml 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"BstFvYds8QHg4u6aQn9q","title":"Polly (polly)","pathname":"/framework/externals/projects/polly","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Polly 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"rtVyBJBzMfJhQSiQdK42","title":"Python (python)","pathname":"/framework/externals/projects/python","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Python 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"rLBMSMa4ZQKndsDBb1GG","title":"Redis (redis)","pathname":"/framework/externals/projects/redis","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Redis 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"S7sw8QU65G0l94yALl3m","title":"Scriban (scriban)","pathname":"/framework/externals/projects/scriban","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Scriban 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"eL36w2ePnqOSXUCN0GXu","title":"Wechat (wechat)","pathname":"/framework/externals/projects/wechat","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"plug","description":"Wechat 项目的能力范围、部署产物、接入入口与使用边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"框架指南"},{"label":"扩展插件","icon":"plug-circle-bolt"},{"label":"按项目阅读","icon":"folders"}]},{"id":"Eg8cvlR6ujaHfFJ7OH7P","title":"宿主概览","pathname":"/hosting/hosting","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"server","description":"选择终端、后台或 Web 宿主，理解应用身份、配置目录和插件生命周期。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"宿主程序"}]},{"id":"gZmBvwJyELx5LiIIM18T","title":"终端宿主","pathname":"/hosting/terminal","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"terminal","description":"使用交互式终端验证插件、命令和后台业务，区分运行身份与部署方案。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"宿主程序"}]},{"id":"ECv2SnLJPAKfrhWhKYOq","title":"后台服务宿主","pathname":"/hosting/daemon","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"gears","description":"承载长期后台任务，正确区分宿主生命周期集成、服务安装和业务就绪。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"宿主程序"}]},{"id":"gnlch6ITSlEKfjFRarWN","title":"Web 宿主","pathname":"/hosting/web","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"globe","description":"启动插件化 HTTP 宿主，组织站点配置，并验证控制器与运行环境。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"宿主程序"}]},{"id":"wT7LqrSlUnTIFyb5z02v","title":"部署宿主","pathname":"/hosting/deployment","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"truck","description":"将宿主、插件与环境配置组合成可运行目录，核对变量、版本和更新边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"宿主程序"}]},{"id":"bwv0xYG1CRZEKk9pPpnc","title":"容器化环境","pathname":"/hosting/containerization","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"boxes-stacked","description":"使用仓库 Podman 清单准备开发依赖，识别端口、挂载和持久化边界。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"宿主程序"}]},{"id":"SbuqNCP4qAXTFwj2ZkfL","title":"工具概览","pathname":"/tools/tools","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"screwdriver-wrench","description":"Zongsoft 工具链概览。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"工具"}]},{"id":"ETwCXb69AH9Zi1m2lC0r","title":"部署工具","pathname":"/tools/deployer","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"truck-ramp-box","description":"使用 dotnet-deploy 将本地和 NuGet 产物组合到可验证的宿主运行目录。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"工具"}]},{"id":"1HXiIcsf7WR5Ob6MIWWi","title":"打包工具","pathname":"/tools/packager","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"box","description":"将完整发布目录制作为 Linux 安装包，检查入口、systemd 和安装生命周期。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"工具"}]},{"id":"dhtJDJ4YnxwCpWu4uYHs","title":"升级工具","pathname":"/tools/upgrader","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"arrows-rotate","description":"制作 ZIP 升级包与 manifest，理解文件选择、校验和更新与发布顺序。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"工具"}]},{"id":"idnkx7eZvzwJtRjWH3kx","title":"正则表达式工具","pathname":"/tools/regular","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"magnifying-glass","description":"使用 Windows 正则测试器理解匹配、组和重复捕获，并保持选项与应用一致。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"工具"}]},{"id":"6RQQ2In07DFYfSJgD8WH","title":"包与模块索引","pathname":"/references/packages","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"boxes-stacked","description":"Zongsoft 常见包、模块和源码目录索引。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"参考"}]},{"id":"kiXyeS6HmUfYuh2cb2aA","title":"部署文件格式","pathname":"/references/deploy-files","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"file-code","description":"以 Discussions 领域与 Web 插件的真实部署清单说明资源布局和变量。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"参考"}]},{"id":"XmKR8Ia8VkNPD92c7Bo8","title":"选项配置文件","pathname":"/references/option-files","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"sliders","description":"以 Discussions 的真实 option 和消费代码说明配置键、文件匹配与覆盖。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"参考"}]},{"id":"H7NKezdFcQWlTup7HCVD","title":"术语表","pathname":"/references/glossary","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"book","description":"查找框架、数据、消息、模型与交付术语，并跳转到解释和使用场景。","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"参考"}]},{"id":"DrNhl9nR8zgyzkneDsNP","title":"常见问题","pathname":"/faq","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"circle-question","description":"按可观察现象定位插件、配置、数据、消息和交付中的常见问题。","breadcrumbs":[{"label":"Documentation","icon":"books"}]},{"id":"6fiH8xn8QNPvjtgqb51h","title":"用户案例","pathname":"/cases","siteSpaceId":"sitesp_bvGr0","lang":"zh","icon":"seedling","description":"以 Discussions 社区论坛的真实源码串联插件、数据、权限、文件和归档。","breadcrumbs":[{"label":"Documentation","icon":"books"}]},{"id":"NWh17ADJqZJb6uehHNBw","title":"Zongsoft Framework","pathname":"/documentation/en","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book-open","description":"English documentation for the Zongsoft framework, hosts, and toolchain.","breadcrumbs":[{"label":"Documentation","icon":"books"}]},{"id":"udPmRu8VsDSlhqzN3ZX8","title":"What Is Zongsoft?","pathname":"/documentation/en/overview/what-is-zongsoft","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"circle-info","description":"Understand the composition, positioning and applicable scenarios of the Zongsoft open source framework series.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Overview"}]},{"id":"qdcx0rItTaTkGwCrNEGK","title":"Design Principles","pathname":"/documentation/en/overview/conception","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"lightbulb","description":"Understand Zongsoft's design trade-offs for public contracts, plugin assembly, explicit metadata, and deployment composition.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Overview"}]},{"id":"5E8zYVBJ1voKPRiUt1Oo","title":"Architecture Overview","pathname":"/documentation/en/overview/architecture","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"diagram-project","description":"Understand the responsibilities of Core, plugins, hosts and infrastructure from the perspective of dependency direction and running process.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Overview"}]},{"id":"zvzpuFR4YfQNpgICggXh","title":"Core Concepts and Collaboration","pathname":"/documentation/en/overview/concepts","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"shapes","description":"Distinguish between host, plugin, module, service, provider, builtin and four types of metadata files.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Overview"}]},{"id":"O8naJ042ehAUEUno7EHF","title":"Plugin Architecture","pathname":"/documentation/en/overview/pluginization","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"puzzle-piece","description":"Basic concepts and operation methods of Zongsoft plugin-based applications.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Overview"}]},{"id":"1MKbQGA1xIgUDFmTt1Ta","title":"Why Pluginize","pathname":"/documentation/en/overview/pluginization/why-pluginization","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"puzzle-piece","description":"Explore the maintenance cost of a tightly coupled SaaS system through payments, orders, and devices, and see how layers, business modules, and plugin composition help.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Overview"},{"label":"Plugin Architecture","icon":"puzzle-piece"}]},{"id":"Z7fqummfyyw1KYzXdq2m","title":"Finding Module Boundaries Through Business Changes","pathname":"/documentation/en/overview/pluginization/business-boundaries","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"cubes","description":"Find module boundaries through business change: rules, composition, compilation, and delivery each answer a different question.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Overview"},{"label":"Plugin Architecture","icon":"puzzle-piece"}]},{"id":"C3sm2N6Xft4LdqPXOmnH","title":"Reusing Business Capabilities Across Hosts","pathname":"/documentation/en/overview/pluginization/host-independent-business","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"arrows-split-up-and-left","description":"Keep business operations in services so controllers, commands, and background entry points share the same rules.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Overview"},{"label":"Plugin Architecture","icon":"puzzle-piece"}]},{"id":"umYN2ouFOPAD58BPwtXO","title":"Designing Extension Points as Collaboration Contracts","pathname":"/documentation/en/overview/pluginization/extension-contracts","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"diagram-project","description":"An extension point is composed of a composition path and behavioral agreements; give filters, validators, and events maintainable collaboration contracts.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Overview"},{"label":"Plugin Architecture","icon":"puzzle-piece"}]},{"id":"MYkfm5TAcDOtQPYVddlj","title":"From Incremental Change to Verified Plugin Delivery","pathname":"/documentation/en/overview/pluginization/evolutionary-delivery","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"route","description":"Introduce plugins gradually through business slices with independent acceptance criteria, keeping every step runnable, observable, and reversible.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Overview"},{"label":"Plugin Architecture","icon":"puzzle-piece"}]},{"id":"Avv72u9HDZaamBDunxVp","title":"Deployment Model","pathname":"/documentation/en/overview/deployment","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"truck-ramp-box","description":"Understand the overall model of deployment, packaging, and upgrades in Zongsoft.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Overview"}]},{"id":"cAki6MtnfbNCfI0DlnVW","title":"Prerequisites","pathname":"/documentation/en/get-started/prerequisites","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"list-check","description":"Prepare SDK, tooling, and source build output based on selected tutorials, distinguishing package usage from framework source code development.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Get Started"}]},{"id":"EnHsrAXhFUyDuhoD5vHG","title":"Install Packages","pathname":"/documentation/en/get-started/install","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"download","description":"Install Zongsoft related NuGet packages and global tools.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Get Started"}]},{"id":"fynR4LkKLvjvwD9Am9Cz","title":"Choose a Host","pathname":"/documentation/en/get-started/hosting","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"server","description":"Choose the appropriate Zongsoft host based on debugging, service running, and Web API scenarios.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Get Started"}]},{"id":"3Iy3YD3ZedMKzM5AQ0D9","title":"Deploy Your First Plugin","pathname":"/documentation/en/get-started/deploy-first-plugin","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"rocket","description":"Deploy the Discussions field and web plugin along with the existing hosting solution.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Get Started"}]},{"id":"Lwrxal0khTbAQ1kCOdw2","title":"Write Your First Business Plugin","pathname":"/documentation/en/get-started/first-business-plugin","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"puzzle-piece","description":"Understand the business model, service registration, plugin manifest and deliverables from existing modules in Discussions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Get Started"}]},{"id":"wa28zcJmCHWFJNWFke9s","title":"Run and Debug","pathname":"/documentation/en/get-started/run-and-debug","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"bug","description":"Locate operational problems layer by layer by process, plugin, configuration, service and business call.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Get Started"}]},{"id":"27eABOnvbiVB9LZrI8hI","title":"Core Library","pathname":"/documentation/en/framework/core","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"cube","description":"Responsibilities and main namespace of Zongsoft.Core core class library.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"Y3Tai69fsgTvEJvLUoxm","title":"Zongsoft.Caching","pathname":"/documentation/en/framework/core/caching","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"Responsibilities and main types of the Zongsoft.Caching namespace.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"OID7H9mrQEXXZfE7TNJL","title":"Cache","pathname":"/documentation/en/framework/core/caching/memory-cache","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"MemoryCache in-process cache, expiration policy, dependency tokens, and eviction events.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Caching","icon":"database"}]},{"id":"xNrCx0A1KGR4RGb1YOIh","title":"Spooler","pathname":"/documentation/en/framework/core/caching/spooler","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"layer-group","description":"Understand batch buffering, trigger conditions, concurrent refresh and data consumption from the framework log implementation and existing tests.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Caching","icon":"database"}]},{"id":"5Uf2Vy7IFx138TNJdLfO","title":"Zongsoft.Collections","pathname":"/documentation/en/framework/core/collections","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"list-tree","description":"Responsibilities and main types of the Zongsoft.Collections namespace.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"hobTxGMNxviJaKtK1Qwx","title":"Categories","pathname":"/documentation/en/framework/core/collections/category","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"list-tree","description":"Category classification tree and usage of CategoryBase, CategoryCollection, CategoryCollectionBase.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Collections","icon":"list-tree"}]},{"id":"3EYYmAMLIbjxYUZGgpWU","title":"Hierarchical Structures","pathname":"/documentation/en/framework/core/collections/hierarchical","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"code-branch","description":"Hierarchical hierarchical nodes, node collections, path search and hierarchical expressions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Collections","icon":"list-tree"}]},{"id":"pNEit5oPB2q2vQzRBn9c","title":"Parameters","pathname":"/documentation/en/framework/core/collections/parameters","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"sliders","description":"Parameters parameter packs, type keys, string keys, chain building and JSON serialization.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Collections","icon":"list-tree"}]},{"id":"kuGbQoOb7LogW9HfQYdX","title":"Synchronized Collections","pathname":"/documentation/en/framework/core/collections/synchronized","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"shield","description":"SynchronizedList and SynchronizedDictionary synchronized collections.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Collections","icon":"list-tree"}]},{"id":"jR3E67ZxDgdd6akRtXwU","title":"Collection Extensions","pathname":"/documentation/en/framework/core/collections/extensions","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"wrench","description":"Enumerable, CollectionUtility, DictionaryUtility, and collection extension methods.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Collections","icon":"list-tree"}]},{"id":"UO6DDnXQ50DVKk4eu0Gr","title":"Zongsoft.Common","pathname":"/documentation/en/framework/core/common","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"wrench","description":"Responsibilities and main types of the Zongsoft.Common namespace.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"oe5TFoUnNBjo1YYT14Op","title":"Aggregate Exceptions","pathname":"/documentation/en/framework/core/common/aggregate-exception-utility","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"circle-info","description":"AggregateExceptionUtility Aggregate exception handling tool.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"k4bYyaQXAyNHcv1xuqBX","title":"Annotation Utilities","pathname":"/documentation/en/framework/core/common/annotation-utility","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book","description":"AnnotationUtility member annotation reading tool.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"kDQ1JabxMO9jwwCxGaPi","title":"Bit Vector","pathname":"/documentation/en/framework/core/common/bit-vector","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"code","description":"BitVector32 and BitVector64 bit tag structures.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"OvmUYFpoO7CytpZCLCc5","title":"Buffer Utilities","pathname":"/documentation/en/framework/core/common/buffer","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"code","description":"Buffer memory leasing, encoding, decoding and binary reading tools.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"SYQfBxDTovghZzFXnDZG","title":"Checksums","pathname":"/documentation/en/framework/core/common/checksum","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"shield","description":"Checksum Calculation, parsing and verification of checksum structures.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"MiVL8GelUn6DkJBYKlYI","title":"Type Conversion","pathname":"/documentation/en/framework/core/common/convert","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"code","description":"Convert type conversion and hexadecimal conversion tool.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"ayUGdqeXhMNDgLJ6js4N","title":"Enum Utilities","pathname":"/documentation/en/framework/core/common/enum-utility","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"list-check","description":"EnumUtility and EnumEntry enumeration metadata tools.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"RZRWWDMnNdRtfhBTJmRY","title":"Hierarchy Vector","pathname":"/documentation/en/framework/core/common/hierarchy-vector32","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"code-branch","description":"HierarchyVector32 four-level hierarchical encoding structure.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"IQa72hMrGhhyTcL1dVAI","title":"Asynchronous Locks","pathname":"/documentation/en/framework/core/common/locker","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"shield","description":"Locker Synchronous and asynchronous mutex locks.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"siuEpuSWcuBNzh4IQU3Q","title":"Notifications","pathname":"/documentation/en/framework/core/common/notification","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"message","description":"Notification change token tool.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"cS3k0Aa8vRfajsyeqLhB","title":"Operation Exceptions","pathname":"/documentation/en/framework/core/common/operation-exception","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"circle-info","description":"OperationException Operation exception.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"AhJzAx643i4N35BnBz0D","title":"Predicates","pathname":"/documentation/en/framework/core/common/predication","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"circle-check","description":"Composable conditional assertions from the security module event and log filtering instructions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"R5fNbdI5zQL2KZJfbOew","title":"Randomizer","pathname":"/documentation/en/framework/core/common/randomizer","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"shuffle","description":"Explain the real purpose of the random string in the body file name of Discussions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"q3cZsu09JtRa4Cyc5sLa","title":"Sequence Generators","pathname":"/documentation/en/framework/core/common/sequence","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"arrow-up-1-9","description":"Responsibilities are generated with external serial numbers and site domain descriptions in the Discussions map.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"OtSBKnCyLSbJfwTcpXAc","title":"Timer","pathname":"/documentation/en/framework/core/common/timer","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"clock","description":"Understand periodic callback, cancellation, stop and release through the existing TimerTest in the framework.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"UF5frrZ1xCFH0zzNqLQW","title":"Timestamp","pathname":"/documentation/en/framework/core/common/timestamp","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"clock","description":"Understand epoch and elapsed time in Discussions attachment names.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"TKg4YLFpUhdNLutqUYTt","title":"Validators","pathname":"/documentation/en/framework/core/common/validator","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"clipboard-check","description":"Understanding the results, failure information, and calling context of the password policy validator from the framework security module.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"kZpbHJh2HsxlKu2yrobu","title":"Type Aliases","pathname":"/documentation/en/framework/core/common/type-alias","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book","description":"TypeAlias type aliases, generic types, nullable types, and array type resolution.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"BR1OQARDluSf6DOle3gc","title":"Common Extensions","pathname":"/documentation/en/framework/core/common/extensions","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"wrench","description":"ArrayExtension, StringExtension, DateTimeExtension, TimeSpanUtility, TypeExtension, UriExtension common extensions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Common","icon":"wrench"}]},{"id":"TWxgJ2DWtbrMz0Wye8aa","title":"Zongsoft.Communication","pathname":"/documentation/en/framework/core/communication","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"radio","description":"Responsibilities and main types of the Zongsoft.Communication namespace.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"fXLhYBypTi75aO2WhJJf","title":"General Communication","pathname":"/documentation/en/framework/core/communication/general","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"satellite-dish","description":"ISender, IReceiver, Listener, Channel, and IPacketizer general communication abstractions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Communication","icon":"radio"}]},{"id":"LjfOvctur69Idce8mttw","title":"Request/Response","pathname":"/documentation/en/framework/core/communication/request-response","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"right-left","description":"IRequest, IRequester and IResponse, IResponder request response abstractions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Communication","icon":"radio"}]},{"id":"5blFtq1mZG1mwEV2U0V2","title":"Notifier","pathname":"/documentation/en/framework/core/communication/notifier","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"bell","description":"INotifier notifies the initiator of interface and implementation status.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Communication","icon":"radio"}]},{"id":"YesaYB4Z9LorZFghqvw0","title":"Transmitter","pathname":"/documentation/en/framework/core/communication/transmitter","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"paper-plane","description":"ITransmitter, TransmitterDescriptor, TransmitterHandler and template notification sending.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Communication","icon":"radio"}]},{"id":"FsvwWTZ0cM07ErJEApn1","title":"Zongsoft.Components","pathname":"/documentation/en/framework/core/components","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"cubes","description":"Responsibilities of the Zongsoft.Components namespace and its subnamespaces.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"s6T7pvTrBuWXhRBbPQrO","title":"Identifiers","pathname":"/documentation/en/framework/core/components/identifier","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"fingerprint","description":"From Discussions User Identity understands the type and value that together form the identity.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"nKRzMGDjc8o3DcOzUU8Y","title":"Aliases","pathname":"/documentation/en/framework/core/components/alias-attribute","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"tag","description":"Zongsoft.Components AliasAttribute alias declaration and reading.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"4te0WYPVMIJCKyvvELTh","title":"Commands","pathname":"/documentation/en/framework/core/components/commands","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"terminal","description":"Understand parameters, options, service dependencies and execution with Discussions' MessageSendCommand.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"3fH0oFUbYQMIZfm7uin3","title":"Events","pathname":"/documentation/en/framework/core/components/events","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"bolt","description":"Understand assembly boundaries for module events from the Event Registry entry in Discussions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"oKuCCD4iGqEJF8yk1bJT","title":"Workers","pathname":"/documentation/en/framework/core/components/worker","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"person-running","description":"Zongsoft.Components Worker worker model and worker command.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"aAn4f8ADzlcqX8DJXDh7","title":"Handlers","pathname":"/documentation/en/framework/core/components/handler","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"hand-pointer","description":"Zongsoft.Components Handler handler abstraction, positioning and selection.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"AALldmMNH6coexR8tKjR","title":"Filters","pathname":"/documentation/en/framework/core/components/filter","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"filter","description":"Understand filter timing, lifecycle and permissions from Discussions query post-text processing.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"zWrzxClCf0SsPPyCj4eX","title":"Superviser","pathname":"/documentation/en/framework/core/components/superviser","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"eye","description":"Monitor the lifecycle using the framework's SuperviserTest real-world objects and concurrent testing instructions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"Tik1jbSTObOuRQBPg50F","title":"Weighted Selection","pathname":"/documentation/en/framework/core/components/weighter","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"scale-balanced","description":"Zongsoft.Components Weighter Smooth weighted polling selector.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"tTQocSNFa1vkKkIOxeXl","title":"Discriminators","pathname":"/documentation/en/framework/core/components/discriminator","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"tags","description":"Zongsoft.Components Discriminator discriminator and plugin builtin assembly.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"V9y79WoJ8iIbPdsSZMP9","title":"Attempt Tracking","pathname":"/documentation/en/framework/core/components/attempter","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"shield-halved","description":"Zongsoft.Components Attempter Failed attempt statistics and lock window.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"cldJagBs7vwMfVtMTBh3","title":"Converters","pathname":"/documentation/en/framework/core/components/converters","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"repeat","description":"Zongsoft.Components.Converters Common type converters.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"vFMdfL3BpSCVEmMkxILK","title":"State Machine","pathname":"/documentation/en/framework/core/components/states","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"code-branch","description":"Combine Discussions' state actions with the framework's state machine to understand migration, handler, and completion phases.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"UP5vC73k6B4XTC6bZfj0","title":"Execution Pipeline","pathname":"/documentation/en/framework/core/components/executor","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"bolt-lightning","description":"Zongsoft.Components Executor executor, context, Feature characteristics and execution pipeline.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Components","icon":"cubes"}]},{"id":"DBpyfHHRFRg8OehNZhff","title":"Zongsoft.Configuration","pathname":"/documentation/en/framework/core/configuration","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"sliders","description":"Start by reading Discussions options and understand configuration sources, object bindings, connection settings, Profiles, Models, and Options.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"2cVvKKRk2fioRnOOXJcZ","title":"Zongsoft.Data","pathname":"/documentation/en/framework/core/data","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"Responsibilities of the Zongsoft.Data namespace and its subnamespaces in the core class library.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"5OqGT3HfqOFrnxryAcDH","title":"Transactions","pathname":"/documentation/en/framework/core/data/transactions","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"rotate","description":"Responsibilities and main types of Zongsoft.Data.Transaction class and Zongsoft.Data.Transactions namespace.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Data","icon":"database"}]},{"id":"BJaG0l9WMp4trgts86ri","title":"Zongsoft.Diagnostics","pathname":"/documentation/en/framework/core/diagnostics","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"stethoscope","description":"Use Hangfire handler and framework log test to explain log entry, context and placement.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"2dqT9pKwXkM3Fimioz9U","title":"Telemetry","pathname":"/documentation/en/framework/core/diagnostics/telemetry","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"chart-line","description":"Understand meters, gauges, labels and exports from real authentication metrics from the framework security module.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Diagnostics","icon":"stethoscope"}]},{"id":"0IP2JeiIJa49hStqkOGU","title":"Zongsoft.Expressions","pathname":"/documentation/en/framework/core/expressions","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"code","description":"Zongsoft.Expressions' expression evaluation abstraction, lexer, token model, and tokenizer extensions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"hsyRKPsJHmkebdzIDWuS","title":"Zongsoft.IO","pathname":"/documentation/en/framework/core/io","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"folder-tree","description":"Upload the description of the virtual file system and path in the Discussions long text and attachments.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"khx0acpi6L2bJYrvTX3x","title":"Zongsoft.Messaging","pathname":"/documentation/en/framework/core/messaging","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"message","description":"Zongsoft.Messaging's message queue abstraction, acknowledgment model, configuration discovery and daemon subscription mechanism.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"gmH3tC3YZwStVymEHeAS","title":"Zongsoft.Reflection","pathname":"/documentation/en/framework/core/reflection","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"magnifying-glass","description":"Zongsoft.Reflection's reflective access, dynamic accessors and member expression evaluation capabilities.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"wsqCYnNLUGSCjNeDEZ4e","title":"Zongsoft.Resources","pathname":"/documentation/en/framework/core/resources","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book","description":"Use Discussions' resource keys and framework existing test instructions to localize resources, position fallbacks, and component titles.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"DwXPUPrFJgl4woWRlyv8","title":"Zongsoft.Scheduling","pathname":"/documentation/en/framework/core/scheduling","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"calendar","description":"Use the framework Hangfire example to concatenate the dispatch contract, handler and host lifecycle.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"0S5cR86g3qyXgY9SaAc6","title":"Zongsoft.Security","pathname":"/documentation/en/framework/core/security","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"shield","description":"Declarative identities, credentials, keys, verification codes and security base models of the Zongsoft.Security namespace in Zongsoft.Core.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"OpBqQkZlIL0zYIYTsYP2","title":"Privileges","pathname":"/documentation/en/framework/core/security/privileges","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"user-shield","description":"Permission model, authenticator, authorizer and default implementation of Zongsoft.Security.Privileges in Zongsoft.Core.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Security","icon":"shield"}]},{"id":"aJJN6NSH7tttEFpooxEr","title":"Zongsoft.Serialization","pathname":"/documentation/en/framework/core/serialization","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"brackets-curly","description":"Understanding serialization boundaries from Discussions user archive filtering and model properties.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"khPzLxMLxaWTQ01gg5y2","title":"Zongsoft.Services","pathname":"/documentation/en/framework/core/services","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"server","description":"Understand the application context, service registration, service resolution and plugin service discovery of Zongsoft.Services.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"mBiIjHlv1aqGvZW8tXOp","title":"Service Resolution and Ownership","pathname":"/documentation/en/framework/core/services/locating","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"magnifying-glass","description":"Service resolution scope and lifecycle, illustrated by dependencies between Discussions services.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Services","icon":"server"}]},{"id":"iTIPew1FPueh8uMiUg3H","title":"Distributed Locks","pathname":"/documentation/en/framework/core/services/distributed-lock","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"lock","description":"Understand lock contention, leases, renewals, fencing tokens, and handling after loss of ownership through the Redis multi-process paradigm.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Services","icon":"server"}]},{"id":"egDblj5Q7So9flnW0FBt","title":"Zongsoft.Terminals","pathname":"/documentation/en/framework/core/terminals","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"terminal","description":"Zongsoft.Terminals terminal abstraction, command executor and interactive console program.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"2Y6DnRhXdf82106OzbZa","title":"Terminal","pathname":"/documentation/en/framework/core/terminals/terminal","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"terminal","description":"Zongsoft.Terminals terminal abstraction, console terminal and interactive command mode.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Terminals","icon":"terminal"}]},{"id":"Cj1LJOaD4hvLMxaNWvWD","title":"Commands","pathname":"/documentation/en/framework/core/terminals/commands","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"keyboard","description":"Zongsoft.Terminals.Commands Terminal built-in commands.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"},{"label":"Zongsoft.Terminals","icon":"terminal"}]},{"id":"uBJ2RI7o8ZObd7C2rSlH","title":"Zongsoft.Text","pathname":"/documentation/en/framework/core/text","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"font","description":"Zongsoft.Text text template interface, regular validator and common text matching usage.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"kpFxYpfUUQwsKYuWoggr","title":"Zongsoft.Versioning","pathname":"/documentation/en/framework/core/version","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"code-commit","description":"The semantic version and numerical version number in the Zongsoft.Versioning namespace.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Core Library","icon":"cube"}]},{"id":"XAEE5sTmBHmYX1P8YPo1","title":"Plugin Framework","pathname":"/documentation/en/framework/plugins","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"puzzle-piece","description":"Responsibilities and core concepts of Zongsoft.Plugins plugin framework.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"LWthllHW8eb1n2mojXd5","title":"Plugin Application Model","pathname":"/documentation/en/framework/plugins/application-model","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"sitemap","description":"Understand hosts, application contexts, modules, and services in plugin-based applications.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Plugin Framework","icon":"puzzle-piece"}]},{"id":"XtTKtcWpgm5Qg8KVpKWf","title":"Plugin Manifests and Loading","pathname":"/documentation/en/framework/plugins/plugin-file","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"puzzle-piece","description":"Discussions list explaining assembly, dependencies, extension paths and builtins.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Plugin Framework","icon":"puzzle-piece"}]},{"id":"KaWbSBist2ezXYcwk2BB","title":"Host Integration","pathname":"/documentation/en/framework/plugins/hosting","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"power-off","description":"Start plugin-based applications in the .NET Host and load the plugin directory.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Plugin Framework","icon":"puzzle-piece"}]},{"id":"OUwAKUDeynue7UxHCcTt","title":"Builtins and Services","pathname":"/documentation/en/framework/plugins/builtins-and-services","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book-open","description":"Understanding plugin builtin and container services from Discussions module instances, validators and command dependencies.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Plugin Framework","icon":"puzzle-piece"}]},{"id":"PrZ4bC4tV30uqt5uzclQ","title":"Data Engine","pathname":"/documentation/en/framework/data","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"Design goals, capabilities, and starting points for the Zongsoft.Data data engine.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"8yy1j4hGy2K3tiLTIaJS","title":"Object Relationships and Data Access","pathname":"/documentation/en/framework/data/concepts","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"diagram-project","description":"Understand object-relational mapping, entities, navigation, data shapes, accessors and database-driven collaboration.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"T0sHZBNn0PQ26XaCEGWV","title":"Run Your First Data Query","pathname":"/documentation/en/framework/data/quickstart","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"play","description":"Query along the Discussions forum to verify mappings, identities, connections, and results.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"9VXTSD3OjYdSWPUgEgYV","title":"Data Schemas","pathname":"/documentation/en/framework/data/schema","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"brackets-curly","description":"Understand schema controls on fields and navigation from user archives, browsing history, and topic auditing.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"tz0wx9Zorudwp1jGfM1y","title":"Mapping Files","pathname":"/documentation/en/framework/data/mapping","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"table","description":"Explanation mapping with Forum composite key, topic body relationship and sequence number configuration of Discussions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"yiw8Wf7ZWAYuaI9Ue9rp","title":"Connection Configuration","pathname":"/documentation/en/framework/data/connections","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"Configure data connections, drivers and read/write separation.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"xNT1H7DDNp23XqNWACzv","title":"Data Access Interfaces","pathname":"/documentation/en/framework/data/data-access","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book-open","description":"Explain accessors, result lifecycle and business boundaries with Discussions module accessors and real service calls.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"BnMdNQnbZE70wfe2a4FX","title":"Conditions and Operands","pathname":"/documentation/en/framework/data/conditions-and-operands","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book-open","description":"Understand condition combinations and database-side expressions from moderator review and page views increment.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"VQ41XRRS1LyRhllCkxI2","title":"Queries and Navigation","pathname":"/documentation/en/framework/data/querying","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book-open","description":"Use forum top topics, browsing records and voting statistics to illustrate conditions, modes, paging and aggregation.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"8ud03SdBkO4M3qHaGQY0","title":"Write Operations","pathname":"/documentation/en/framework/data/writing","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book-open","description":"Illustrate real writing and its side effects with post voting, topic moderation, and browsing history.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"h3YknoX9gAwTnlSSSVf8","title":"Transactions and Consistency","pathname":"/documentation/en/framework/data/transactions","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book-open","description":"Understand transaction boundaries, commits, and external side effects from publishing topics and update statistics.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"ZMrXpVbKKQ2RygzA3Q53","title":"Data Services","pathname":"/documentation/en/framework/data/services","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book-open","description":"Understand business service boundaries through ThreadService, DataValidator and query filters.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"1bhQDOmKMbW073thPyN4","title":"Browse by Driver","pathname":"/documentation/en/framework/data/drivers","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"hard-drive","description":"Select, deploy and extend Zongsoft.Data database driver.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"}]},{"id":"JUU7xtC7KiVCm7rDsVV0","title":"MySQL (mysql)","pathname":"/documentation/en/framework/data/drivers/mysql","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"MySQL data driver deployment, connection configuration and ad hoc verification.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"},{"label":"Browse by Driver","icon":"hard-drive"}]},{"id":"jv7pJ3hFqqVS3DYWDkNL","title":"SQL Server (mssql)","pathname":"/documentation/en/framework/data/drivers/mssql","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"SQL Server data driver deployment, connection configuration and ad hoc validation.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"},{"label":"Browse by Driver","icon":"hard-drive"}]},{"id":"U8CEGsPzjjAZueLPhnZw","title":"PostgreSQL (postgres)","pathname":"/documentation/en/framework/data/drivers/postgres","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"PostgreSQL data driver deployment, connection configuration and ad hoc verification.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"},{"label":"Browse by Driver","icon":"hard-drive"}]},{"id":"4OlSzYK1CZnMq2ZRKqXM","title":"SQLite (sqlite)","pathname":"/documentation/en/framework/data/drivers/sqlite","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"SQLite data driver deployment, connection configuration and ad hoc validation.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"},{"label":"Browse by Driver","icon":"hard-drive"}]},{"id":"KVPRrq3yrAUTdednHxpz","title":"DuckDB (duckdb)","pathname":"/documentation/en/framework/data/drivers/duckdb","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"DuckDB data driver deployment, connection configuration and ad hoc validation.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"},{"label":"Browse by Driver","icon":"hard-drive"}]},{"id":"sH1a4IvJVdg504d10N3g","title":"ClickHouse (clickhouse)","pathname":"/documentation/en/framework/data/drivers/clickhouse","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"ClickHouse data driver deployment, connection configuration and ad hoc verification.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"},{"label":"Browse by Driver","icon":"hard-drive"}]},{"id":"Dmq3bQ3w4d1ulKcZMKfE","title":"TDengine (tdengine)","pathname":"/documentation/en/framework/data/drivers/tdengine","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"TDengine data driver deployment, connection configuration and ad hoc verification.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"},{"label":"Browse by Driver","icon":"hard-drive"}]},{"id":"8vauph9mGB3tRykhu8l4","title":"InfluxDB (influx)","pathname":"/documentation/en/framework/data/drivers/influx","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"InfluxDB data driver deployment, connection configuration and ad hoc verification.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Data Engine","icon":"database"},{"label":"Browse by Driver","icon":"hard-drive"}]},{"id":"nvCnhRdNRM8xpfW92KO5","title":"Web Fundamentals","pathname":"/documentation/en/framework/web","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"globe","description":"Organize ASP .NET Core applications with plugins to connect controllers, data services, request pipelines, and protocol extensions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"9ZKMi73o1ew1YchyKxxD","title":"Deploy Controller Plugins","pathname":"/documentation/en/framework/web/controllers","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"Build and deploy Discussions Web class library, check controller discovery and request prerequisites.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Web Fundamentals","icon":"globe"}]},{"id":"lrfYL9RL73JEHbwwC8xa","title":"Requests and Data Service APIs","pathname":"/documentation/en/framework/web/data-services","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"route","description":"The topic Review Controller in Discussions explains the division of labor between Web and Business Services.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Web Fundamentals","icon":"globe"}]},{"id":"CBVHF4Sh6NiQ2LIKM905","title":"OpenAPI and gRPC","pathname":"/documentation/en/framework/web/protocols","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"network-wired","description":"Enable OpenAPI/Scalar and gRPC for plugin web applications, distinguishing between document generation, service registration, and actual protocol endpoints.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Web Fundamentals","icon":"globe"}]},{"id":"PzI3My4Z9MTUW0ud5A0S","title":"Security","pathname":"/documentation/en/framework/security","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"shield-halved","description":"Connect the Core security contract, persistent identity permissions, web interface and verification code to establish a complete security call chain.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"fCuKvzcsLiAz4WS3FEkz","title":"Authentication and Authorization","pathname":"/documentation/en/framework/security/authentication","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"shield-halved","description":"Understanding Authentication Boundaries from Discussions' Identity Challenges, Claim Transformations, and SiteId Validation.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Security","icon":"shield-halved"}]},{"id":"NzZ69MLeZlnBdPXLUqBB","title":"CAPTCHAs and Confirmation Tokens","pathname":"/documentation/en/framework/security/captcha","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"fingerprint","description":"Use Authencode image challenges and short-lived confirmation tokens to understand two-phase verification, caching and replay boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Security","icon":"shield-halved"}]},{"id":"Btl1Q8llAYDGGiZ3w275","title":"Diagnostics","pathname":"/documentation/en/framework/diagnostics","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"stethoscope","description":"Filtering and exporting configurations for metrics and tracking are described in terms of framework package options.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"AoDyYiN0ofmTKI6BLGcl","title":"OTLP Integration","pathname":"/documentation/en/framework/diagnostics/otlp","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"satellite-dish","description":"Integrate OTLP gRPC client and Listener server, check handler assembly, data conversion and reliability limitations.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Diagnostics","icon":"stethoscope"}]},{"id":"9HBQtHoPCdyiAljDd84L","title":"AI Integration","pathname":"/documentation/en/framework/intelligences","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"brain","description":"Configure the AI assistant, connect to model services, and use chat capabilities through the terminal or the web.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"NJ8Xg1N3gnWGI1ub8CCS","title":"Sessions and Streaming Responses","pathname":"/documentation/en/framework/intelligences/sessions","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"comments","description":"Understand chat history, streaming enumeration, session isolation, and post-interruption state.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"AI Integration","icon":"brain"}]},{"id":"kTEzStEbhDG1Z1v8qYQN","title":"Machine Learning","pathname":"/documentation/en/framework/learning","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"graduation-cap","description":"Understand the machine learning module's datasets, estimator catalog, and training pipeline, as well as the current implementation scope.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"LRKDd8Pl3Nbx4t9QNa3t","title":"Network Communication","pathname":"/documentation/en/framework/net","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"network-wired","description":"Understand TCP packetization, handler lifecycle, and resource ownership when working with network communication components.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"3bVfVgkKAktpTmenbEwJ","title":"Hardware Information","pathname":"/documentation/en/framework/hardwares","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"microchip","description":"Collect hardware information of the current operating environment and understand the stability and usage scope of the device identification.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"P1P7HVY749KVIYBUJyRs","title":"Reporting","pathname":"/documentation/en/framework/reporting","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"file-chart-column","description":"Ability to organize report descriptions, template resources and data loading, and identify report contracts and specific engines.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"Ip42fdyCKlWOonKFCkYm","title":"Message Queues","pathname":"/documentation/en/framework/messaging","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"message","description":"Selection, configuration, implementation differences and usage examples of Zongsoft message queue plugin.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"dug1HYaxrQw6Ggs3SxGA","title":"Publish/Subscribe and Delivery Concepts","pathname":"/documentation/en/framework/messaging/concepts","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"envelopes-bulk","description":"From messages, topics, consumers to acknowledgments and idempotency, understand the different delivery models behind the unified interface.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Message Queues","icon":"message"}]},{"id":"3ER68vdAHwnyC6ZFnI4h","title":"Reliable Delivery and Message Storage","pathname":"/documentation/en/framework/messaging/reliability","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"shield-check","description":"Check the boundaries of message acceptance and confirmation, configure database storage and design business idempotent for ZeroMQ.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Message Queues","icon":"message"}]},{"id":"OVbDONCZLu6nRvjtkIqD","title":"Browse by Project","pathname":"/documentation/en/framework/messaging/projects","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"folders","description":"Find messaging implementations by their Kafka, RabbitMQ, MQTT, ZeroMQ, and .storages source projects.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Message Queues","icon":"message"}]},{"id":"VcOxhjpxlHtDOCuG9Wl1","title":"Kafka (kafka)","pathname":"/documentation/en/framework/messaging/projects/kafka","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"message","description":"Deployment, connections, protocol mapping and reliability boundaries of Kafka messaging project.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Message Queues","icon":"message"},{"label":"Browse by Project","icon":"folders"}]},{"id":"4b8wWhUdacj6e87ISiww","title":"RabbitMQ (rabbit)","pathname":"/documentation/en/framework/messaging/projects/rabbit","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"message","description":"Deployment, connections, protocol mappings and reliability boundaries for the RabbitMQ messaging project.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Message Queues","icon":"message"},{"label":"Browse by Project","icon":"folders"}]},{"id":"IdHd4s0j90U8DnWr79Cr","title":"MQTT (mqtt)","pathname":"/documentation/en/framework/messaging/projects/mqtt","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"message","description":"Deployment, connection, protocol mapping and reliability boundaries of MQTT messaging project.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Message Queues","icon":"message"},{"label":"Browse by Project","icon":"folders"}]},{"id":"XHNusPpMzKlxTUC8O5Mm","title":"ZeroMQ (zero)","pathname":"/documentation/en/framework/messaging/projects/zero","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"message","description":"Deployment, connections, protocol mapping and reliability boundaries of the ZeroMQ messaging project.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Message Queues","icon":"message"},{"label":"Browse by Project","icon":"folders"}]},{"id":"Nk2AYyGPleIecxYMM2tn","title":"Message Storage (.storages)","pathname":"/documentation/en/framework/messaging/projects/storages","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":".storages Deployment products of the database message storage project, Broker connection matching and recovery conditions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Message Queues","icon":"message"},{"label":"Browse by Project","icon":"folders"}]},{"id":"tcsFDZWIIxX4KqsbFqJX","title":"Automatic Upgrades","pathname":"/documentation/en/framework/upgrading","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"rotate","description":"Understand the cooperation of upgrade packages, discovery channels, in-app upgraders, and out-of-process deployers.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"2hvkPT7dBNzEhtWQnffm","title":"Upgrade Integration and Recovery","pathname":"/documentation/en/framework/upgrading/workflow","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"stairs","description":"Configure upgrade discovery and deployment handover, verify release status, and locate upgrade failures by stage.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Automatic Upgrades","icon":"rotate"}]},{"id":"zz2xnOiSRcwJVWJqOhqp","title":"Extension Plugins","pathname":"/documentation/en/framework/externals","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug-circle-bolt","description":"Select third-party adapters according to application scenarios, and understand the relationship between public contracts, plugin deployment, and external operating environments.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"}]},{"id":"nXKmzTUcdSTjsOrOVqfW","title":"Caching and Distributed Coordination","pathname":"/documentation/en/framework/externals/caching","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"database","description":"Configure Redis cache, etcd sequence number and lease lock, and understand Garnet server and reliable message storage.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"}]},{"id":"U1aAGoZ4RZ8kRyoCP7Pe","title":"Scripts and Expressions","pathname":"/documentation/en/framework/externals/scripting","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"code","description":"Choose Lua, Python, or Scriban with expression contracts and manage syntax, variables, and runtime isolation.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"}]},{"id":"ui7nqbtpVlAlEpv0a5MD","title":"Task Scheduling and Resilient Execution","pathname":"/documentation/en/framework/externals/execution","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"calendar-check","description":"Illustrating handler registration, job execution, and retry boundaries through the framework Hangfire sample.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"}]},{"id":"zxn5aJUlL6qvNYITnY0G","title":"Spreadsheet and Template Extensions","pathname":"/documentation/en/framework/externals/documents","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"table","description":"Template data assembly is explained with the Discussions user archive provider and user-list.xlsx.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"}]},{"id":"jhnUbMToPOotm4yPd817","title":"Cloud Services and Callbacks","pathname":"/documentation/en/framework/externals/cloud","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"cloud","description":"Integrate object storage, cloud communication and WeChat services, and correctly handle callback verification and repeated notifications.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"}]},{"id":"hr4ZXBbmXYJgJut7R88f","title":"OPC UA Device Protocol","pathname":"/documentation/en/framework/externals/integration","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"Understand OPC UA nodes, sessions, subscriptions, and certificates, and plan industrial device integration.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"}]},{"id":"BG5eHYQVflPf4SInCd9a","title":"Browse by Project","pathname":"/documentation/en/framework/externals/projects","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"folders","description":"Find extension packages, configuration entry points, and topic guides by their externals source projects.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"}]},{"id":"gng1FVDLT5lPg9KADkn8","title":"Aliyun (aliyun)","pathname":"/documentation/en/framework/externals/projects/aliyun","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"The Aliyun project's capability scope, deployment products, integration entrance and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"YubdCDjjf3MWO6ucYtYJ","title":"Amazon (amazon)","pathname":"/documentation/en/framework/externals/projects/amazon","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"The Amazon project's capability scope, deployment products, integration entry points, and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"9XwiLAJVoHhtTYy4cOIu","title":"ClosedXml (closedxml)","pathname":"/documentation/en/framework/externals/projects/closedxml","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"ClosedXml project's capability scope, deployment products, integration entry and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"EwdFRBqHW2x5DA77g4mM","title":"Etcd (etcd)","pathname":"/documentation/en/framework/externals/projects/etcd","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"The etcd project's capability scope, deployment products, integration entry points and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"308HVCyPoIrqHOg9w9g0","title":"Garnet (garnet)","pathname":"/documentation/en/framework/externals/projects/garnet","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"The Garnet project's capability scope, deployment products, integration portals and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"HqTRPrqmYFBc6hkDRsxJ","title":"Hangfire (hangfire)","pathname":"/documentation/en/framework/externals/projects/hangfire","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"The Hangfire project's capability scope, deployment products, integration entrance and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"8s8cSpl2WXQCFszQx6Z1","title":"Lua (lua)","pathname":"/documentation/en/framework/externals/projects/lua","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"The Lua project's capability scope, deployment products, integration entry points, and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"9wy0XsFQBwC3jLt0H18b","title":"Opc (opc)","pathname":"/documentation/en/framework/externals/projects/opc","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"Opc project's capability scope, deployment products, integration entry and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"WYr7KzulH3xlUaukhkj8","title":"OpenXml (openxml)","pathname":"/documentation/en/framework/externals/projects/openxml","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"The capability scope, deployment products, integration entry points and usage boundaries of the OpenXml project.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"t2Uo58EVKvfVM6gAlavP","title":"Polly (polly)","pathname":"/documentation/en/framework/externals/projects/polly","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"Polly project's capability scope, deployment products, integration entry points and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"Xyg2I9qnavizPYG6Tzym","title":"Python (python)","pathname":"/documentation/en/framework/externals/projects/python","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"The capability scope, deployment products, integration entry points and usage boundaries of the Python project.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"FY1uaWbdOn6nr6s4uank","title":"Redis (redis)","pathname":"/documentation/en/framework/externals/projects/redis","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"Redis project's capability scope, deployment products, integration entrance and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"dV5V7bTR6m5ZC9LPj165","title":"Scriban (scriban)","pathname":"/documentation/en/framework/externals/projects/scriban","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"The Scriban project's capability scope, deployment products, integration portals and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"vtXJS994iXSmwiMTFCkb","title":"Wechat (wechat)","pathname":"/documentation/en/framework/externals/projects/wechat","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"plug","description":"Wechat project's capability scope, deployment products, integration entrance and usage boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Framework Guides"},{"label":"Extension Plugins","icon":"plug-circle-bolt"},{"label":"Browse by Project","icon":"folders"}]},{"id":"iXQtWF8W02ouWqnCs3hI","title":"Host Overview","pathname":"/documentation/en/hosting/hosting","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"server","description":"Choose a terminal, backend, or web host, and understand application identity, configuration directories, and plugin lifecycle.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Hosts"}]},{"id":"3PJNjAPiIlqOzKRGx2b2","title":"Terminal Host","pathname":"/documentation/en/hosting/terminal","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"terminal","description":"Use an interactive terminal to verify plugins, commands, and backend services, and distinguish between running identities and deployment plans.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Hosts"}]},{"id":"NudQx1RMggqAl1gVvP1m","title":"Background Service Host","pathname":"/documentation/en/hosting/daemon","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"gears","description":"Host long-term background tasks, correctly distinguishing between host lifecycle integration, service installation and business readiness.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Hosts"}]},{"id":"IDaU8OebBgRFiqZZ0ZNw","title":"Web Host","pathname":"/documentation/en/hosting/web","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"globe","description":"Start the plugin architecture HTTP host, organize the site configuration, and verify the controller and runtime environment.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Hosts"}]},{"id":"QXcIfOgkxFt5i8RYEb85","title":"Deploy a Host","pathname":"/documentation/en/hosting/deployment","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"truck","description":"Combine hosts, plugins and environment configurations into runnable directories, and check variables, versions and update boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Hosts"}]},{"id":"fsLTaoI0pfMQvGGioIh3","title":"Container Environments","pathname":"/documentation/en/hosting/containerization","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"boxes-stacked","description":"Prepare development dependencies using repository Podman manifests, identifying ports, mounts, and persistence boundaries.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Hosts"}]},{"id":"ciC8giNSoe34HYe9errM","title":"Tool Overview","pathname":"/documentation/en/tools/tools","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"screwdriver-wrench","description":"Zongsoft toolchain overview.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Tools"}]},{"id":"vJXFhrZvjzt1RZse1N52","title":"Deployment Tool","pathname":"/documentation/en/tools/deployer","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"truck-ramp-box","description":"Use dotnet-deploy to combine local and NuGet artifacts into a verifiable host run directory.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Tools"}]},{"id":"WoT42jnEANfokOMnOUum","title":"Packaging Tool","pathname":"/documentation/en/tools/packager","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"box","description":"Make the complete release directory into a Linux installation package, check the entry, systemd and installation lifecycle.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Tools"}]},{"id":"5aCp7jrSifOnYgRAUtqt","title":"Upgrade Tool","pathname":"/documentation/en/tools/upgrader","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"arrows-rotate","description":"Create ZIP upgrade packages and manifests, and understand file selection, verification and update, and release sequence.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Tools"}]},{"id":"bCoF3Vz0dfp9PcEj4qAp","title":"Regular Expression Tool","pathname":"/documentation/en/tools/regular","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"magnifying-glass","description":"Use the Windows regex tester to understand matching, grouping, and repeat capture, and keep options consistent with your app.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Tools"}]},{"id":"Fn6zWQOnbK4lXpiVmZIk","title":"Package and Module Index","pathname":"/documentation/en/references/packages","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"boxes-stacked","description":"Zongsoft common package, module and source code directory index.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Reference"}]},{"id":"Jdzk0yef0613e1UljX0N","title":"Deployment File Format","pathname":"/documentation/en/references/deploy-files","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"file-code","description":"Illustrating resource layout and variables with a real deployment manifest of Discussions area and Web plugin.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Reference"}]},{"id":"i3tIjiloroEDGYIQ6Sul","title":"Option Configuration Files","pathname":"/documentation/en/references/option-files","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"sliders","description":"Describes configuration keys, file matching, and overwriting with real options and consumption codes from Discussions.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Reference"}]},{"id":"2QoWVsxxIakxwns2KKot","title":"Glossary","pathname":"/documentation/en/references/glossary","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"book","description":"Find framework, data, messaging, model and delivery terminology and jump to explanations and usage scenarios.","breadcrumbs":[{"label":"Documentation","icon":"books"},{"label":"Reference"}]},{"id":"IuoSkeALXaN86wrQa8Oq","title":"FAQ","pathname":"/documentation/en/faq","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"circle-question","description":"Locate common issues in plugins, configuration, data, messaging, and delivery by observable phenomena.","breadcrumbs":[{"label":"Documentation","icon":"books"}]},{"id":"jYM1r3pNjnefWkTOX2mh","title":"User Stories","pathname":"/documentation/en/cases","siteSpaceId":"sitesp_ofgLn","lang":"en","icon":"seedling","description":"Concatenate plugins, data, permissions, files and archives with real source code from the Discussions community forum.","breadcrumbs":[{"label":"Documentation","icon":"books"}]}]}