0

我有一个从文件加载 _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,以便如果在磁盘上找不到视图,则搜索将在数据库中继续?

如果没有,有没有人成功地做过类似的事情?

4

0 回答 0