我有一个Web应用程序从文件加载_Layout和正常的页面视图,我现在尝试使用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,以便在磁盘上找不到视图时,搜索将在数据库中继续?
如果没有,有没有人做过类似的事情并取得成功?