diff --git a/src/Umbraco.Core/DynamicWrapper.cs b/src/Umbraco.Core/DynamicWrapper.cs deleted file mode 100644 index 120481b6ac..0000000000 --- a/src/Umbraco.Core/DynamicWrapper.cs +++ /dev/null @@ -1,178 +0,0 @@ -using System; -using System.Linq; -using System.Collections.Generic; -using System.Reflection; -using System.Reflection.Emit; -using System.Threading; - -namespace Umbraco.Core -{ - internal class DynamicWrapper - { - public class DynamicWrapperBase - { - internal protected object RealObject; - } - - private static readonly ModuleBuilder _moduleBuilder; - - static DynamicWrapper() - { - var name = Assembly.GetExecutingAssembly().GetName(); - var assembly = Thread.GetDomain().DefineDynamicAssembly(name, AssemblyBuilderAccess.Run); - _moduleBuilder = assembly.DefineDynamicModule("DynamicWrapperModule", false); - } - - private static readonly WrapperDictionary _wrapperDictionary = new WrapperDictionary(); - - public static Type GetWrapper(Type interfaceType, Type realObjectType) - { - Type wrapperType = _wrapperDictionary.GetType(interfaceType, realObjectType); - - if (wrapperType == null) - { - wrapperType = GenerateWrapperType(interfaceType, realObjectType); - _wrapperDictionary.SetType(interfaceType, realObjectType, wrapperType); - } - - return wrapperType; - } - - private static Type GenerateWrapperType(Type InterfaceType, Type RealObjectType) - { - var wrapperName = string.Format("{0}_{1}_Wrapper", InterfaceType.Name, RealObjectType.Name); - - TypeBuilder wrapperBuilder = _moduleBuilder.DefineType( - wrapperName, - TypeAttributes.NotPublic | TypeAttributes.Sealed, - typeof(DynamicWrapperBase), - new[] { InterfaceType }); - - var wrapperMethod = new WrapperMethodBuilder(RealObjectType, wrapperBuilder); - - foreach (MethodInfo method in InterfaceType.AllMethods()) - { - wrapperMethod.Generate(method); - } - - return wrapperBuilder.CreateType(); - } - - public static T CreateWrapper(object realObject) where T : class - { - var dynamicType = GetWrapper(typeof(T), realObject.GetType()); - var dynamicWrapper = (DynamicWrapperBase)Activator.CreateInstance(dynamicType); - - dynamicWrapper.RealObject = realObject; - - return dynamicWrapper as T; - } - } - - internal class WrapperMethodBuilder - { - private readonly Type _realObjectType; - private readonly TypeBuilder _wrapperBuilder; - - public WrapperMethodBuilder(Type realObjectType, TypeBuilder proxyBuilder) - { - _realObjectType = realObjectType; - _wrapperBuilder = proxyBuilder; - } - - public void Generate(MethodInfo newMethod) - { - if (newMethod.IsGenericMethod) - newMethod = newMethod.GetGenericMethodDefinition(); - - FieldInfo srcField = typeof(DynamicWrapper.DynamicWrapperBase).GetField("RealObject", BindingFlags.Instance | BindingFlags.NonPublic); - - var parameters = newMethod.GetParameters(); - var parameterTypes = parameters.Select(parameter => parameter.ParameterType).ToArray(); - - var methodBuilder = _wrapperBuilder.DefineMethod( - newMethod.Name, - MethodAttributes.Public | MethodAttributes.Virtual, - newMethod.ReturnType, - parameterTypes); - - if (newMethod.IsGenericMethod) - { - methodBuilder.DefineGenericParameters( - newMethod.GetGenericArguments().Select(arg => arg.Name).ToArray()); - } - - ILGenerator ilGenerator = methodBuilder.GetILGenerator(); - - LoadRealObject(ilGenerator, srcField); - PushParameters(parameters, ilGenerator); - ExecuteMethod(newMethod, parameterTypes, ilGenerator); - Return(ilGenerator); - } - - private static void Return(ILGenerator ilGenerator) - { - ilGenerator.Emit(OpCodes.Ret); - } - - private void ExecuteMethod(MethodBase newMethod, Type[] parameterTypes, ILGenerator ilGenerator) - { - MethodInfo srcMethod = GetMethod(newMethod, parameterTypes); - - if (srcMethod == null) throw new MissingMethodException("Unable to find method " + newMethod.Name + " in " + _realObjectType.FullName); - - ilGenerator.Emit(OpCodes.Call, srcMethod); - } - - private MethodInfo GetMethod(MethodBase realMethod, Type[] parameterTypes) - { - if (realMethod.IsGenericMethod) - return _realObjectType.GetGenericMethod(realMethod.Name, parameterTypes); - - return _realObjectType.GetMethod(realMethod.Name, parameterTypes); - } - - private static void PushParameters(ICollection parameters, ILGenerator ilGenerator) - { - for (int i = 1; i < parameters.Count + 1; i++) - ilGenerator.Emit(OpCodes.Ldarg, i); - } - - private static void LoadRealObject(ILGenerator ilGenerator, FieldInfo srcField) - { - ilGenerator.Emit(OpCodes.Ldarg_0); - ilGenerator.Emit(OpCodes.Ldfld, srcField); - } - } - - internal class WrapperDictionary - { - private readonly Dictionary _wrapperTypes = new Dictionary(); - - private static string GenerateKey(Type interfaceType, Type realObjectType) - { - return interfaceType.Name + "->" + realObjectType.Name; - } - - public Type GetType(Type interfaceType, Type realObjectType) - { - string key = GenerateKey(interfaceType, realObjectType); - - if (_wrapperTypes.ContainsKey(key)) - return _wrapperTypes[key]; - - return null; - } - - public void SetType(Type interfaceType, Type realObjectType, Type wrapperType) - { - string key = GenerateKey(interfaceType, realObjectType); - - if (_wrapperTypes.ContainsKey(key)) - _wrapperTypes[key] = wrapperType; - else - _wrapperTypes.Add(key, wrapperType); - } - - } -} \ No newline at end of file diff --git a/src/Umbraco.Core/IO/FileSystemProviderAttribute.cs b/src/Umbraco.Core/IO/FileSystemProviderAttribute.cs index 8b34bcd04c..4d09bc4f1e 100644 --- a/src/Umbraco.Core/IO/FileSystemProviderAttribute.cs +++ b/src/Umbraco.Core/IO/FileSystemProviderAttribute.cs @@ -5,7 +5,7 @@ using System.Text; namespace Umbraco.Core.IO { - [AttributeUsage(AttributeTargets.Interface, AllowMultiple = false, Inherited = false)] + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] internal class FileSystemProviderAttribute : Attribute { public string Alias { get; set; } diff --git a/src/Umbraco.Core/IO/FileSystemProviderManager.cs b/src/Umbraco.Core/IO/FileSystemProviderManager.cs index de59497555..99d9eb5833 100644 --- a/src/Umbraco.Core/IO/FileSystemProviderManager.cs +++ b/src/Umbraco.Core/IO/FileSystemProviderManager.cs @@ -1,7 +1,9 @@ using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Configuration; using System.Linq; +using System.Reflection; using System.Text; using Umbraco.Core.Configuration; @@ -31,44 +33,85 @@ namespace Umbraco.Core.IO #endregion + /// + /// used to cache the lookup of how to construct this object so we don't have to reflect each time. + /// + private class ProviderConstructionInfo + { + public object[] Parameters { get; set; } + public ConstructorInfo Constructor { get; set; } + public string ProviderAlias { get; set; } + } + + private readonly ConcurrentDictionary _providerLookup = new ConcurrentDictionary(); + private readonly ConcurrentDictionary _wrappedProviderLookup = new ConcurrentDictionary(); + public IFileSystem GetFileSystemProvider(string alias) { - var providerConfig = _config.Providers[alias]; - if(providerConfig == null) - throw new ArgumentException(string.Format("No provider found with the alias '{0}'", alias)); + //either get the constructor info from cache or create it and add to cache + var ctorInfo = _providerLookup.GetOrAdd(alias, s => + { + var providerConfig = _config.Providers[s]; + if (providerConfig == null) + throw new ArgumentException(string.Format("No provider found with the alias '{0}'", s)); - var providerType = Type.GetType(providerConfig.Type); - if(providerType == null) - throw new InvalidOperationException(string.Format("Could not find type '{0}'", providerConfig.Type)); + var providerType = Type.GetType(providerConfig.Type); + if (providerType == null) + throw new InvalidOperationException(string.Format("Could not find type '{0}'", providerConfig.Type)); - if (providerType.IsAssignableFrom(typeof(IFileSystem))) - throw new InvalidOperationException(string.Format("The type '{0}' does not implement IFileSystem", providerConfig.Type)); + if (providerType.IsAssignableFrom(typeof (IFileSystem))) + throw new InvalidOperationException(string.Format("The type '{0}' does not implement IFileSystem", providerConfig.Type)); - var paramCount = providerConfig.Parameters != null ? providerConfig.Parameters.Count : 0; - var constructor = providerType.GetConstructors() - .SingleOrDefault(x => x.GetParameters().Count() == paramCount - && x.GetParameters().All(y => providerConfig.Parameters.AllKeys.Contains(y.Name))); - if(constructor == null) - throw new InvalidOperationException(string.Format("Could not find constructor for type '{0}' which accepts {1} parameters", providerConfig.Type, paramCount)); + var paramCount = providerConfig.Parameters != null ? providerConfig.Parameters.Count : 0; + var constructor = providerType.GetConstructors() + .SingleOrDefault(x => x.GetParameters().Count() == paramCount + && x.GetParameters().All(y => providerConfig.Parameters.AllKeys.Contains(y.Name))); + if (constructor == null) + throw new InvalidOperationException(string.Format("Could not find constructor for type '{0}' which accepts {1} parameters", providerConfig.Type, paramCount)); - var parameters = new object[paramCount]; - for(var i = 0; i < paramCount; i++) - parameters[i] = providerConfig.Parameters[providerConfig.Parameters.AllKeys[i]].Value; + var parameters = new object[paramCount]; + for (var i = 0; i < paramCount; i++) + parameters[i] = providerConfig.Parameters[providerConfig.Parameters.AllKeys[i]].Value; - return (IFileSystem) constructor.Invoke(parameters); + //return the new constructor info class to cache so we don't have to do this again. + return new ProviderConstructionInfo() + { + Constructor = constructor, + Parameters = parameters, + ProviderAlias = s + }; + }); + + var fs = (IFileSystem)ctorInfo.Constructor.Invoke(ctorInfo.Parameters); + return fs; } public TProviderTypeFilter GetFileSystemProvider() - where TProviderTypeFilter : class, IFileSystem + where TProviderTypeFilter : FileSystemWrapper { - var attr = - (FileSystemProviderAttribute)typeof(TProviderTypeFilter).GetCustomAttributes(typeof(FileSystemProviderAttribute), false). - SingleOrDefault(); + //get the alias for the type from cache or look it up and add it to the cache, then we don't have to reflect each time + var alias = _wrappedProviderLookup.GetOrAdd(typeof (TProviderTypeFilter), fsType => + { + //validate the ctor + var constructor = fsType.GetConstructors() + .SingleOrDefault(x => + x.GetParameters().Count() == 1 && TypeHelper.IsTypeAssignableFrom(x.GetParameters().Single().ParameterType)); + if (constructor == null) + throw new InvalidOperationException("The type of " + fsType + " must inherit from FileSystemWrapper and must have a constructor that accepts one parameter of type " + typeof(IFileSystem)); - if (attr == null) - throw new InvalidOperationException(string.Format("The provider type filter '{0}' is missing the required FileSystemProviderAttribute", typeof(FileSystemProviderAttribute).FullName)); + var attr = + (FileSystemProviderAttribute)fsType.GetCustomAttributes(typeof(FileSystemProviderAttribute), false). + SingleOrDefault(); - return GetFileSystemProvider(attr.Alias).As(); + if (attr == null) + throw new InvalidOperationException(string.Format("The provider type filter '{0}' is missing the required FileSystemProviderAttribute", typeof(FileSystemProviderAttribute).FullName)); + + return attr.Alias; + }); + + var innerFs = GetFileSystemProvider(alias); + var outputFs = Activator.CreateInstance(typeof (TProviderTypeFilter), innerFs); + return (TProviderTypeFilter)outputFs; } } } diff --git a/src/Umbraco.Core/IO/FileSystemWrapper.cs b/src/Umbraco.Core/IO/FileSystemWrapper.cs new file mode 100644 index 0000000000..f0fcff213d --- /dev/null +++ b/src/Umbraco.Core/IO/FileSystemWrapper.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.IO; + +namespace Umbraco.Core.IO +{ + /// + /// All custom file systems that are based upon another IFileSystem should inherit from FileSystemWrapper + /// + /// + /// An IFileSystem is generally used as a base file system, for example like a PhysicalFileSystem or an S3FileSystem. + /// Then, other custom file systems are wrapped upon these files systems like MediaFileSystem, etc... All of the custom + /// file systems must inherit from FileSystemWrapper. + /// + /// This abstract class just wraps the 'real' IFileSystem object passed in to its constructor. + /// + internal abstract class FileSystemWrapper : IFileSystem + { + private readonly IFileSystem _wrapped; + + protected FileSystemWrapper(IFileSystem wrapped) + { + _wrapped = wrapped; + } + + public IEnumerable GetDirectories(string path) + { + return _wrapped.GetDirectories(path); + } + + public void DeleteDirectory(string path) + { + _wrapped.DeleteDirectory(path); + } + + public void DeleteDirectory(string path, bool recursive) + { + _wrapped.DeleteDirectory(path, recursive); + } + + public bool DirectoryExists(string path) + { + return _wrapped.DirectoryExists(path); + } + + public void AddFile(string path, Stream stream) + { + _wrapped.AddFile(path, stream); + } + + public void AddFile(string path, Stream stream, bool overrideIfExists) + { + _wrapped.AddFile(path, stream, overrideIfExists); + } + + public IEnumerable GetFiles(string path) + { + return _wrapped.GetFiles(path); + } + + public IEnumerable GetFiles(string path, string filter) + { + return _wrapped.GetFiles(path, filter); + } + + public Stream OpenFile(string path) + { + return _wrapped.OpenFile(path); + } + + public void DeleteFile(string path) + { + _wrapped.DeleteFile(path); + } + + public bool FileExists(string path) + { + return _wrapped.FileExists(path); + } + + public string GetRelativePath(string fullPathOrUrl) + { + return _wrapped.GetRelativePath(fullPathOrUrl); + } + + public string GetFullPath(string path) + { + return _wrapped.GetFullPath(path); + } + + public string GetUrl(string path) + { + return _wrapped.GetUrl(path); + } + + public DateTimeOffset GetLastModified(string path) + { + return _wrapped.GetLastModified(path); + } + + public DateTimeOffset GetCreated(string path) + { + return _wrapped.GetCreated(path); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/IO/IMediaFileSystem.cs b/src/Umbraco.Core/IO/IMediaFileSystem.cs deleted file mode 100644 index eaa0796301..0000000000 --- a/src/Umbraco.Core/IO/IMediaFileSystem.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Umbraco.Core.IO -{ - [FileSystemProvider("media")] - internal interface IMediaFileSystem : IFileSystem - { } -} diff --git a/src/Umbraco.Core/IO/MediaFileSystem.cs b/src/Umbraco.Core/IO/MediaFileSystem.cs new file mode 100644 index 0000000000..3c8b3429b6 --- /dev/null +++ b/src/Umbraco.Core/IO/MediaFileSystem.cs @@ -0,0 +1,17 @@ +using System.Linq; +using System.Text; + +namespace Umbraco.Core.IO +{ + /// + /// A custom file system provider for media + /// + [FileSystemProvider("media")] + internal class MediaFileSystem : FileSystemWrapper + { + public MediaFileSystem(IFileSystem wrapped) + : base(wrapped) + { + } + } +} diff --git a/src/Umbraco.Core/IO/MediaFileSystemExtensions.cs b/src/Umbraco.Core/IO/MediaFileSystemExtensions.cs index 02c031608d..3fb79fff4e 100644 --- a/src/Umbraco.Core/IO/MediaFileSystemExtensions.cs +++ b/src/Umbraco.Core/IO/MediaFileSystemExtensions.cs @@ -9,7 +9,7 @@ namespace Umbraco.Core.IO { public static class MediaFileSystemExtensions { - internal static string GetRelativePath(this IMediaFileSystem fs, int propertyId, string fileName) + internal static string GetRelativePath(this MediaFileSystem fs, int propertyId, string fileName) { var seperator = UmbracoSettings.UploadAllowDirectories ? Path.DirectorySeparatorChar @@ -18,7 +18,7 @@ namespace Umbraco.Core.IO return propertyId.ToString() + seperator + fileName; } - internal static IEnumerable GetThumbnails(this IMediaFileSystem fs, string path) + internal static IEnumerable GetThumbnails(this MediaFileSystem fs, string path) { var parentDirectory = System.IO.Path.GetDirectoryName(path); var extension = System.IO.Path.GetExtension(path); @@ -28,7 +28,7 @@ namespace Umbraco.Core.IO .ToList(); } - internal static void DeleteFile(this IMediaFileSystem fs, string path, bool deleteThumbnails) + internal static void DeleteFile(this MediaFileSystem fs, string path, bool deleteThumbnails) { fs.DeleteFile(path); @@ -38,7 +38,7 @@ namespace Umbraco.Core.IO fs.DeleteThumbnails(path); } - internal static void DeleteThumbnails(this IMediaFileSystem fs, string path) + internal static void DeleteThumbnails(this MediaFileSystem fs, string path) { fs.GetThumbnails(path) .ForEach(fs.DeleteFile); diff --git a/src/Umbraco.Core/ObjectExtensions.cs b/src/Umbraco.Core/ObjectExtensions.cs index 5313a3c102..6c26c6471f 100644 --- a/src/Umbraco.Core/ObjectExtensions.cs +++ b/src/Umbraco.Core/ObjectExtensions.cs @@ -16,25 +16,7 @@ namespace Umbraco.Core { internal static class ObjectExtensions { - internal static T As(this object realObject) where T : class - { - if (realObject is T) - return realObject as T; - - return DynamicWrapper.CreateWrapper(realObject); - } - - internal static T AsReal(this object wrapper) where T : class - { - if (wrapper is T) - return wrapper as T; - - if (wrapper is DynamicWrapper.DynamicWrapperBase) - return (T)(wrapper as DynamicWrapper.DynamicWrapperBase).RealObject; - - return null; - } - + //private static readonly ConcurrentDictionary> ObjectFactoryCache = new ConcurrentDictionary>(); public static IEnumerable AsEnumerableOfOne(this T input) diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 14e8553e6c..e40cb4077b 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -63,6 +63,7 @@ + @@ -76,10 +77,9 @@ - - + diff --git a/src/Umbraco.Tests/IO/FileSystemProviderManagerTests.cs b/src/Umbraco.Tests/IO/FileSystemProviderManagerTests.cs index 66efad03b9..3888106e70 100644 --- a/src/Umbraco.Tests/IO/FileSystemProviderManagerTests.cs +++ b/src/Umbraco.Tests/IO/FileSystemProviderManagerTests.cs @@ -21,7 +21,7 @@ namespace Umbraco.Tests.IO [Test] public void Can_Get_Typed_File_System() { - var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); Assert.NotNull(fs); } diff --git a/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs b/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs index b78b199054..8b5aeaf318 100644 --- a/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs +++ b/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs @@ -37,7 +37,7 @@ namespace Umbraco.Web.Media.ThumbnailProviders try { - var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); var relativeThumbPath = fs.GetRelativePath(tmpThumbUrl); if (!fs.FileExists(relativeThumbPath)) return false; diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/channels/UmbracoMetaWeblogAPI.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/channels/UmbracoMetaWeblogAPI.cs index 20db34c437..afe99ac4d2 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/channels/UmbracoMetaWeblogAPI.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/channels/UmbracoMetaWeblogAPI.cs @@ -25,11 +25,11 @@ namespace umbraco.presentation.channels { public abstract class UmbracoMetaWeblogAPI : XmlRpcService, IMetaWeblog { - internal readonly IMediaFileSystem _fs; + internal readonly MediaFileSystem _fs; protected UmbracoMetaWeblogAPI() { - _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); } [XmlRpcMethod("blogger.deletePost", diff --git a/src/umbraco.cms/businesslogic/Content.cs b/src/umbraco.cms/businesslogic/Content.cs index 1a5d228760..ad9d992d07 100644 --- a/src/umbraco.cms/businesslogic/Content.cs +++ b/src/umbraco.cms/businesslogic/Content.cs @@ -596,7 +596,7 @@ namespace umbraco.cms.businesslogic { // Remove all files - var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); var uploadField = new Factory().GetNewObject(new Guid("5032a6e6-69e3-491d-bb28-cd31cd11086c")); foreach (Property p in GenericProperties) diff --git a/src/umbraco.cms/businesslogic/Files/UmbracoFile.cs b/src/umbraco.cms/businesslogic/Files/UmbracoFile.cs index b084c4fe83..b5dc3152a4 100644 --- a/src/umbraco.cms/businesslogic/Files/UmbracoFile.cs +++ b/src/umbraco.cms/businesslogic/Files/UmbracoFile.cs @@ -19,18 +19,18 @@ namespace umbraco.cms.businesslogic.Files private string _url; private long _length; - private IMediaFileSystem _fs; + private MediaFileSystem _fs; #region Constructors public UmbracoFile() { - _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); } public UmbracoFile(string path) { - _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); _path = path; @@ -55,7 +55,7 @@ namespace umbraco.cms.businesslogic.Files public static UmbracoFile Save(Stream inputStream, string path) { - var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); fs.AddFile(path, inputStream); return new UmbracoFile(path); diff --git a/src/umbraco.cms/businesslogic/media/UmbracoMediaFactory.cs b/src/umbraco.cms/businesslogic/media/UmbracoMediaFactory.cs index 14a4d982a8..52ad7beb84 100644 --- a/src/umbraco.cms/businesslogic/media/UmbracoMediaFactory.cs +++ b/src/umbraco.cms/businesslogic/media/UmbracoMediaFactory.cs @@ -16,11 +16,11 @@ namespace umbraco.cms.businesslogic.media public virtual int Priority { get { return 1000; } } public abstract string MediaTypeAlias { get; } - internal readonly IMediaFileSystem FileSystem; + internal readonly MediaFileSystem FileSystem; protected UmbracoMediaFactory() { - FileSystem = FileSystemProviderManager.Current.GetFileSystemProvider(); + FileSystem = FileSystemProviderManager.Current.GetFileSystemProvider(); } public virtual bool CanHandleMedia(int parentNodeId, PostedMediaFile postedFile, User user) diff --git a/src/umbraco.cms/businesslogic/web/Document.cs b/src/umbraco.cms/businesslogic/web/Document.cs index c8ad8a37cb..b2d836c89e 100644 --- a/src/umbraco.cms/businesslogic/web/Document.cs +++ b/src/umbraco.cms/businesslogic/web/Document.cs @@ -1288,7 +1288,7 @@ namespace umbraco.cms.businesslogic.web /// public Document Copy(int CopyTo, User u, bool RelateToOrignal) { - var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); CopyEventArgs e = new CopyEventArgs(); e.CopyTo = CopyTo; diff --git a/src/umbraco.editorControls/tinyMCE3/webcontrol/TinyMCEWebControl.cs b/src/umbraco.editorControls/tinyMCE3/webcontrol/TinyMCEWebControl.cs index 1d0ca96464..acef97a17f 100644 --- a/src/umbraco.editorControls/tinyMCE3/webcontrol/TinyMCEWebControl.cs +++ b/src/umbraco.editorControls/tinyMCE3/webcontrol/TinyMCEWebControl.cs @@ -21,7 +21,7 @@ namespace umbraco.editorControls.tinyMCE3.webcontrol { public class TinyMCEWebControl : System.Web.UI.WebControls.TextBox { - internal readonly IMediaFileSystem _fs; + internal readonly MediaFileSystem _fs; public NameValueCollection config = new NameValueCollection(); private string temp; @@ -67,7 +67,7 @@ namespace umbraco.editorControls.tinyMCE3.webcontrol public TinyMCEWebControl() : base() { - _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); base.TextMode = TextBoxMode.MultiLine; base.Attributes.Add("style", "visibility: hidden"); diff --git a/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs b/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs index aa6cec62fd..aaf9579e8d 100644 --- a/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs +++ b/src/umbraco.editorControls/tinymce/tinyMCEImageHelper.cs @@ -136,7 +136,7 @@ namespace umbraco.editorControls.tinymce private static string doResize(Hashtable attributes, out int finalWidth, out int finalHeight) { - var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + var fs = FileSystemProviderManager.Current.GetFileSystemProvider(); string resizeDim = helper.FindAttribute(attributes, "width") + "," + helper.FindAttribute(attributes, "height"); diff --git a/src/umbraco.editorControls/uploadfield/uploadField.cs b/src/umbraco.editorControls/uploadfield/uploadField.cs index f917344031..933fffd8a1 100644 --- a/src/umbraco.editorControls/uploadfield/uploadField.cs +++ b/src/umbraco.editorControls/uploadfield/uploadField.cs @@ -19,11 +19,11 @@ namespace umbraco.editorControls private readonly String _thumbnails; private String _text; - private IMediaFileSystem _fs; + private MediaFileSystem _fs; public uploadField(IData Data, string ThumbnailSizes) { - _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); _data = (cms.businesslogic.datatype.DefaultData) Data; _thumbnails = ThumbnailSizes; } diff --git a/src/umbraco.webservices/media/mediaService.cs b/src/umbraco.webservices/media/mediaService.cs index 062082ee93..1d62141bf5 100644 --- a/src/umbraco.webservices/media/mediaService.cs +++ b/src/umbraco.webservices/media/mediaService.cs @@ -23,11 +23,11 @@ namespace umbraco.webservices.media [ScriptService] public class mediaService : BaseWebService { - internal IMediaFileSystem _fs; + internal MediaFileSystem _fs; public mediaService() { - _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); + _fs = FileSystemProviderManager.Current.GetFileSystemProvider(); } override public Services Service