Cofoundry框架下如何将视图嵌入程序集供主网站使用
Cofoundry 嵌入类库视图的标准实现方案
Cofoundry 针对独立模块化程序集场景提供了原生的视图嵌入加载能力,无需自定义虚拟路径提供程序,完全兼容你当前的目录结构,标准实现步骤如下:
1. 配置类库的嵌入视图资源
在独立程序集Bookings的项目文件(.csproj)中,将对应视图文件标记为嵌入资源,保持类库内的视图目录结构和当前使用的虚拟路径完全一致(即类库内保留Views/CofoundryPages/Components/BookingRequest/Default.cshtml的相对路径)。
SDK风格项目的配置示例如下:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <!-- 项目原有引用、依赖配置 --> <ItemGroup> <!-- 将所有Views目录下的cshtml文件标记为嵌入资源 --> <EmbeddedResource Include="Views/**/*.cshtml" /> </ItemGroup> </Project>
2. 注册模块资源解析
Cofoundry 内置了EmbeddedResourceVirtualPathProvider实现嵌入资源的视图解析,不需要自行开发虚拟路径逻辑。你只需要在Bookings程序集中实现Cofoundry的启动配置接口,将当前程序集注册到Cofoundry的资源解析管线中:
using Cofoundry.Core.Configuration; using Microsoft.Extensions.DependencyInjection; public class BookingsModuleStartupConfig : ICofoundryStartupConfiguration { public void ConfigureServices(IMvcBuilder mvcBuilder, IServiceCollection services) { // 将当前程序集的嵌入资源加入Cofoundry视图解析范围 mvcBuilder.AddCofoundryEmbeddedResources(typeof(BookingsModuleStartupConfig).Assembly); } }
Cofoundry 会自动扫描所有引用程序集中实现了该接口的启动类,不需要在主网站程序中手动添加注册逻辑。
3. 路径兼容与注意事项
- 无需修改现有ViewComponent的视图返回逻辑,Cofoundry的资源解析规则会按照主站点物理文件、已注册嵌入程序集的顺序匹配相同虚拟路径的视图,和你当前的
/Views/CofoundryPages/Components/BookingRequest/Default.cshtml路径完全兼容。 - 排查视图加载失败的两个核心检查点:
- 确认cshtml文件已经被打包到Bookings.dll的嵌入资源中(可通过反编译工具查看dll的嵌入资源列表)
- 确认启动配置类没有被排除在Cofoundry的扫描范围外(默认扫描所有应用引用的非系统程序集)
- 不要自行实现传统ASP.NET MVC风格的自定义VirtualPathProvider,避免和Cofoundry内置的嵌入资源解析逻辑产生冲突,导致视图优先级混乱。
内容的提问来源于stack exchange,提问作者Jørn Wildt
相关产品推荐
相关产品推荐

