Blazor Interactive Auto项目结构困惑求助:组件存放与分工
Blazor Interactive Auto 项目结构规划指南
核心项目职责划分
1. 主项目(project,服务器端)
这是所有组件的核心存放地,不管是Interactive SSR、Interactive Auto还是Interactive WASM组件,都统一放在这里。原因:
- Interactive Auto的核心逻辑是先通过SSR快速渲染页面,再按需切换到Wasm客户端交互,所有组件需要先在服务器端完成初始渲染,同时也要兼容Wasm环境运行。
- 主项目会自动处理组件的双环境编译(服务器端+Wasm客户端),无需手动拆分组件到Client项目。
2. Client项目(project.Client)
正如你了解的,这个项目的核心作用是提供Wasm运行时环境,不需要存放任何业务组件。它的职责仅包括:
- 配置Wasm宿主(比如你
Program.cs里的WebAssemblyHostBuilder初始化) - 注册仅在Wasm环境依赖的服务(比如你的
AddBlazorBootstrap) - 作为Wasm编译的入口,主项目的组件会被自动引用至此,无需手动复制或迁移。
你的Program.cs简洁是正常状态,不要为了“充实”它强行存放组件,保持轻量化即可。
3. Shared项目(project.Shared)
这个项目用于存放跨服务器端和Wasm客户端共享的非组件代码,目前只放自定义数据验证属性是完全合理的。后续还可以补充这类内容:
- 数据传输对象(DTO)
- 枚举类型
- 通用工具类
- 不依赖特定环境的共享业务逻辑
- 模型基类、自定义验证规则等
组件组织建议
在主项目里,推荐按功能模块组织组件,比如:
- 创建
Components/Products、Components/Users等文件夹,每个文件夹下存放对应功能的所有组件(无需按交互模式拆分) - 通过
@rendermode指令给组件或页面指定交互模式,示例:
或者在路由页面全局指定:@* 给单个组件指定Interactive Auto模式 *@ @rendermode InteractiveAuto <div>Auto模式组件内容</div>@page "/products" @rendermode InteractiveAuto <ProductsList />
常见误区纠正
- 不要把Interactive WASM/Auto组件放到Client项目:这会导致服务器端无法渲染这些组件,直接破坏Interactive Auto先SSR再切换的核心机制。
- 不要过度拆分Shared项目:仅将真正需要跨环境复用的代码放在这里,服务器端专属代码(比如数据库访问、后端业务逻辑)留在主项目即可。
Shared项目合理性验证
你当前只存放自定义数据验证属性的做法完全没问题——这类代码需要同时在服务器端(验证提交数据)和客户端(表单实时校验)运行,放在Shared项目正好满足跨环境复用的需求,后续有其他共享代码再逐步添加即可。
内容的提问来源于stack exchange,提问作者solodeving
相关产品推荐
相关产品推荐

