我有一个从文件加载 _Layout 和正常页面视图的 Web 应用程序,我现在尝试使用 VirtualPathProvider 和覆盖的 VirtualFile 从数据库加载部分视图:
public class RavenDbPathProvider : VirtualPathProvider {
public override bool FileExists(string virtualPath) {
if (!virtualPath.StartsWith("TextContents/")) return false;
using (var session = ObjectFactory.GetInstance<IDocumentSession>()) {
return session.Query<TextContent>().Any(w => w.Id == virtualPath);
}
}
public override VirtualFile GetFile(string virtualPath) {
if (!virtualPath.StartsWith("TextContents/"))
return base.GetFile(virtualPath);
return new RavenDbVirtualFile(virtualPath);
}
}
我还在 global.asax 中注册了 Provider:
HostingEnvironment.RegisterVirtualPathProvider(new RavenDbPathProvider());
但是,当我注册 RavenDbPathProvider 时,它似乎被用于所有视图查找。
是否可以注册多个 VirtualPathProviders,以便如果在磁盘上找不到视图,则搜索将在数据库中继续?
如果没有,有没有人成功地做过类似的事情?