7.0 KiB
项目依赖关系
本文档记录 AtomUI.slnx 中项目的主要引用关系。它描述源码维护视角下的依赖方向,不等同于 NuGet 包的最终依赖闭包。
当前解决方案项目
AtomUI.slnx 当前包含核心库、控件库、图标字体、Gallery 宿主:
src/AtomUI.Nativesrc/AtomUI.Localizationsrc/AtomUI.Coresrc/AtomUI.Controls.Sharedsrc/AtomUI.Controlssrc/AtomUI.Desktop.Controlssrc/AtomUI.Desktop.Controls.DataGridsrc/AtomUI.Desktop.Controls.ColorPickersrc/AtomUI.Desktop.Controls.Extrassrc/AtomUI.Generatorsrc/AtomUI.Build.Taskssrc/AtomUI.LanguagePack.Templatesrc/AtomUI.Icons.Sharedsrc/AtomUI.Icons.AntDesignsrc/AtomUI.Icons.AntDesign.Generatorsrc/AtomUI.Fonts.AlibabaSanssrc/AtomUI.Fonts.AlibabaPuHuiTisrc/AtomUI.Toolkits.GalleryBasecontrolgallery/AtomUIGallerycontrolgallery/AtomUIGallery.Desktopcontrolgallery/AtomUIGallery.Browser
主要项目引用
| 项目 | 直接引用 | 说明 |
|---|---|---|
AtomUI.Native |
Avalonia, NWayland |
内部原生平台能力层;封装 Win32、Objective-C、Xlib/XCB、Wayland protocol 等底层调用 |
AtomUI.Localization |
AtomUI.Generator, Avalonia |
BCP 47、Catalog、Snapshot、Manager、Localizer 和 Avalonia 资源桥 |
AtomUI.Core |
AtomUI.Localization, AtomUI.Generator |
框架入口、主题、Token、动画基础设施 |
AtomUI.Build.Tasks |
构建期共享源码、Microsoft.Build.Framework |
XLIFF 校验、模板导出和静态语言包构建,不进入运行时 |
AtomUI.LanguagePack.Template |
无运行时引用 | dotnet new atomui-language-pack 模板包 |
AtomUI.Controls.Shared |
AtomUI.Core, AtomUI.Generator |
控件共享契约和协调器 |
AtomUI.Controls |
AtomUI.Core, AtomUI.Controls.Shared, AtomUI.Fonts.AlibabaSans, AtomUI.Icons.AntDesign, AtomUI.Generator |
公共控件、Primitives、公共主题 |
AtomUI.Desktop.Controls |
AtomUI.Controls, AtomUI.Native, AtomUI.Generator, Avalonia.Desktop, Avalonia.Wayland, Avalonia.X11 |
桌面主控件包及 AtomUI 的桌面后端选择入口 |
AtomUI.Desktop.Controls.DataGrid |
AtomUI.Desktop.Controls, AtomUI.Generator |
独立 DataGrid 包 |
AtomUI.Desktop.Controls.ColorPicker |
AtomUI.Desktop.Controls, AtomUI.Generator, Avalonia.Controls.ColorPicker |
独立 ColorPicker 包 |
AtomUI.Desktop.Controls.Extras |
AtomUI.Desktop.Controls, AtomUI.Generator |
Ant Design 之外的稳定补充控件包 |
AtomUI.Toolkits.GalleryBase |
AtomUI.Desktop.Controls, AtomUI.Generator |
产品中立的 Gallery 展示控件、主题和运行时底座 |
AtomUI.Icons.AntDesign |
AtomUI.Core |
Ant Design 图标注册与生成图标 |
AtomUI.Icons.AntDesign.Generator |
AtomUI.Icons.Shared |
从 SVG 生成 Ant Design 图标源码 |
AtomUI.Fonts.* |
AtomUI.Core |
字体集合注册 |
AtomUIGallery |
AtomUI.Toolkits.GalleryBase, AtomUI.Desktop.Controls, AtomUI.Desktop.Controls.DataGrid, AtomUI.Desktop.Controls.ColorPicker, AtomUI.Generator |
AtomUI 产品示例主体 |
AtomUIGallery.Desktop |
AtomUIGallery |
桌面宿主 |
AtomUIGallery.Browser |
AtomUIGallery, AtomUI.Fonts.AlibabaPuHuiTi |
浏览器宿主 |
内部可见性
多个包通过 InternalsVisibleTo 共享内部实现,维护时需要注意这些不是公开 API:
AtomUI.Core对AtomUI.Controls、AtomUI.Controls.Shared、AtomUI.Desktop.Controls、DataGrid、ColorPicker、Extras 开放内部成员。AtomUI.Controls对AtomUI.Desktop.Controls、DataGrid、ColorPicker、Extras 开放内部成员。AtomUI.Desktop.Controls对 DataGrid、ColorPicker、Extras、性能工具开放内部成员。AtomUI.Native对AtomUI.Desktop.Controls、未来AtomUI.Mobile.Controls开放内部成员。
这些关系说明 DataGrid、ColorPicker 和 Extras 虽然是独立包,但它们不是完全隔离的第三方扩展,而是桌面控件体系的同源扩展。
AtomUI.Native 是能力层,不是策略层。上层库可以通过 internal API 启用原生能力,但不应把控件行为、
主题策略或平台默认配置下沉到 Native。反过来,P/Invoke、原生结构体、协议对象和可释放 native hook
也不应散落在控件实现里。
统一图片加载职责
统一图片加载不新增项目引用;它使用当前的 AtomUI.Core -> AtomUI.Controls.Shared -> AtomUI.Controls -> AtomUI.Desktop.Controls 方向,其中箭头表示“后者引用前者”的源码依赖:
| 项目 | 当前职责 | 不得新增的反向依赖或重复实现 |
|---|---|---|
AtomUI.Core |
通用 IAtomUIOwnedService 收集、Application attach/rollback/逆序 dispose |
不引用 Shared,不定义图片 Source、HTTP、cache 或 codec |
AtomUI.Controls.Shared |
完整应用级图片 engine 与 public contracts | 不引用 Controls,不拥有 Avatar/Previewer 视觉策略 |
AtomUI.Controls |
AsyncImage、ImageLoadController、Avatar 统一 API、受限静态 SvgImageCodec 注册与 Avalonia SVG bridge |
不建立第二套 transport/cache/scheduler,不让 renderer 自行访问 URL/File |
AtomUI.Desktop.Controls |
Previewer item/entry 与 Current/Cover/Preload 策略 | 不保留 Previewer 私有 loader、HttpClient 或全局并发属性 |
AtomUIGallery |
使用 AtomUI AsyncImage |
不引用 AsyncImageLoader.Avalonia 包或附加属性 |
Shared 通过 Core 已有的 internal visibility 实现 owned-service 契约;Core 始终不知道具体 service 类型。Controls 的 SVG codec 通过显式 Builder 注册进入 Shared registry,不能让 Shared 反向引用 Controls。该系统的目录、启动和生命周期见 统一图片加载系统与 管线、并发与生命周期。
已批准 Mobile 目标依赖
以下关系属于 Mobile Foundation 的目标架构,不是当前 AtomUI.slnx 项目或当前直接引用:
flowchart LR
Controls["AtomUI.Controls"] --> Mobile["AtomUI.Mobile.Controls\n目标项目,当前未实现"]
Native["AtomUI.Native"] -. capability .-> Mobile
Generator["AtomUI.Generator"] -. analyzer .-> Mobile
Mobile -. target .-> IOS["iOS Host"]
Mobile -. target .-> Android["Android Host"]
AtomUI.Mobile.Controls直接建立在AtomUI.Controls上,与AtomUI.Desktop.Controls平行且不依赖 Desktop。AtomUI.Native作为正交能力层,仅在 Avalonia 公共 API 无法表达能力时供 Mobile adapter 使用。AtomUI.Generator提供构建期静态 descriptor、Theme 和 Localization 注册,不成为运行时发现机制。- iOS/Android Host 提供生命周期和 adapter;平台宿主不拥有 Control API、Theme 或跨平台状态机。
目标项目加入解决方案后,必须把真实项目引用补入“解决方案项目”和“主要项目引用”;在此之前不得把本节视为当前构建图。 详细包边界见 Mobile Controls 模块。