public IView GetView(VirtualPath path) { if (path.Parts.Count == 0) return null; var filename = "../" + path.Parts.Last(); var candidatePaths = new VirtualPath[] { path } .Concat( from ext in _registry.GetRegisteredExtensions() select path.Append(filename + "." + ext) ); var infos = from c in candidatePaths let info = _registry.GetViewInfo(path) let resource = info.Location(info.RelativePath, _serviceLocator) where resource != null && resource.IsFile select new { Path = c, Resource = resource }; var viewInfo = infos.FirstOrDefault(); if (viewInfo == null) return null; var resourceResolver = new ViewResourceResolver(_registry, _serviceLocator, viewInfo.Resource); var extension = viewInfo.Path.Parts.Last().Split('.').Last(); var viewEngine = _registry.GetViewEngine(extension); return viewEngine.GetView(viewInfo.Path, resourceResolver); }
public void CanAppend(string first, string second, VirtualPathType expectedType, string expectedPath) { var v1 = new VirtualPath(first); var v2 = new VirtualPath(second); var actual = v1.Append(v2); Assert.AreEqual(expectedType, actual.Type); Assert.AreEqual(expectedPath, actual.Path); }