1 // 2 // System.Web.Hosting.VirtualPathProvider 3 // 4 // Author: 5 // Gonzalo Paniagua Javier (gonzalo@ximian.com) 6 // 7 // 8 // Copyright (C) 2006 Novell, Inc (http://www.novell.com) 9 // 10 // Permission is hereby granted, free of charge, to any person obtaining 11 // a copy of this software and associated documentation files (the 12 // "Software"), to deal in the Software without restriction, including 13 // without limitation the rights to use, copy, modify, merge, publish, 14 // distribute, sublicense, and/or sell copies of the Software, and to 15 // permit persons to whom the Software is furnished to do so, subject to 16 // the following conditions: 17 // 18 // The above copyright notice and this permission notice shall be 19 // included in all copies or substantial portions of the Software. 20 // 21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 28 // 29 using System; 30 using System.Collections; 31 using System.IO; 32 using System.Web.Caching; 33 using System.Web.Util; 34 35 namespace System.Web.Hosting { 36 37 public abstract class VirtualPathProvider : MarshalByRefObject 38 { 39 VirtualPathProvider prev; 40 VirtualPathProvider()41 protected VirtualPathProvider () 42 { 43 } 44 45 protected internal VirtualPathProvider Previous { 46 get { return prev; } 47 } 48 Initialize()49 protected virtual void Initialize () 50 { 51 } 52 InitializeAndSetPrevious(VirtualPathProvider prev)53 internal void InitializeAndSetPrevious (VirtualPathProvider prev) 54 { 55 this.prev = prev; 56 Initialize (); 57 } 58 CombineVirtualPaths(string basePath, string relativePath)59 public virtual string CombineVirtualPaths (string basePath, string relativePath) 60 { 61 return VirtualPathUtility.Combine (basePath, relativePath); 62 } 63 DirectoryExists(string virtualDir)64 public virtual bool DirectoryExists (string virtualDir) 65 { 66 if (prev != null) 67 return prev.DirectoryExists (virtualDir); 68 69 return false; 70 } 71 FileExists(string virtualPath)72 public virtual bool FileExists (string virtualPath) 73 { 74 if (prev != null) 75 return prev.FileExists (virtualPath); 76 77 return false; 78 } 79 GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)80 public virtual CacheDependency GetCacheDependency (string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart) 81 { 82 if (prev != null) 83 return prev.GetCacheDependency (virtualPath, virtualPathDependencies, utcStart); 84 85 return null; 86 } 87 GetCacheKey(string virtualPath)88 public virtual string GetCacheKey (string virtualPath) 89 { 90 if (prev != null) 91 return prev.GetCacheKey (virtualPath); 92 93 return null; 94 } 95 GetDirectory(string virtualDir)96 public virtual VirtualDirectory GetDirectory (string virtualDir) 97 { 98 if (prev != null) 99 return prev.GetDirectory (virtualDir); 100 101 return null; 102 } 103 GetFile(string virtualPath)104 public virtual VirtualFile GetFile (string virtualPath) 105 { 106 if (prev != null) 107 return prev.GetFile (virtualPath); 108 109 return null; 110 } 111 GetFileHash(string virtualPath, IEnumerable virtualPathDependencies)112 public virtual string GetFileHash (string virtualPath, IEnumerable virtualPathDependencies) 113 { 114 if (prev != null) 115 return prev.GetFileHash (virtualPath, virtualPathDependencies); 116 117 return null; 118 } 119 InitializeLifetimeService()120 public override object InitializeLifetimeService () 121 { 122 return null; // forever young 123 } 124 OpenFile(string virtualPath)125 public static Stream OpenFile (string virtualPath) 126 { 127 // This thing throws a nullref when we're not inside an ASP.NET appdomain, which is what MS does. 128 VirtualPathProvider provider = HostingEnvironment.VirtualPathProvider; 129 VirtualFile file = provider.GetFile (virtualPath); 130 if (file != null) 131 return file.Open (); 132 133 return null; 134 } 135 } 136 } 137 138