diff --git a/src/Umbraco.Core/Composing/Composers/FileSystemsComposer.cs b/src/Umbraco.Core/Composing/Composers/FileSystemsComposer.cs index d72e9028b1..15c4bd0eea 100644 --- a/src/Umbraco.Core/Composing/Composers/FileSystemsComposer.cs +++ b/src/Umbraco.Core/Composing/Composers/FileSystemsComposer.cs @@ -12,10 +12,15 @@ namespace Umbraco.Core.Composing.Composers // register IFileSystems, which gives access too all filesystems container.RegisterSingleton(factory => factory.GetInstance()); + + // fixme - review registering mediafilesystem. it seems to create cyclic dependencies for castle. + // let's try naming it so the default is overwritten... + // register MediaFileSystem, which can be injected directly // note: the actual MediaFileSystem implementation is created by FileSystems directly, // without being registered in the container - this just gives access to it - container.Register(factory => factory.GetInstance().MediaFileSystem); + container.Register(f => f.GetInstance().MediaFileSystem); + return container; } diff --git a/src/Umbraco.Core/IO/FileSystems.cs b/src/Umbraco.Core/IO/FileSystems.cs index 43ac94624e..cc52487018 100644 --- a/src/Umbraco.Core/IO/FileSystems.cs +++ b/src/Umbraco.Core/IO/FileSystems.cs @@ -298,8 +298,7 @@ namespace Umbraco.Core.IO var innerFs = GetUnderlyingFileSystemNoCache(alias, fallback); var shadowWrapper = new ShadowWrapper(innerFs, "typed/" + alias, () => IsScoped()); - // getting the fs from the container - see FileSystemsComposer - var fs = Current.Container.CreateInstance(new Dictionary{{ "wrapped", (IFileSystem) shadowWrapper }}); + var fs = (IFileSystem)Activator.CreateInstance(typeof(TFileSystem), shadowWrapper); _wrappers.Add(shadowWrapper); // keeping a reference to the wrapper return fs; }); diff --git a/src/Umbraco.Core/IO/MediaFileSystem.cs b/src/Umbraco.Core/IO/MediaFileSystem.cs index 4ecb44cfb9..794f7f5c20 100644 --- a/src/Umbraco.Core/IO/MediaFileSystem.cs +++ b/src/Umbraco.Core/IO/MediaFileSystem.cs @@ -4,6 +4,7 @@ using System.Drawing; using System.IO; using System.Linq; using System.Threading.Tasks; +using Umbraco.Core.Composing; using Umbraco.Core.Configuration.UmbracoSettings; using Umbraco.Core.Exceptions; using Umbraco.Core.Logging; @@ -19,12 +20,12 @@ namespace Umbraco.Core.IO [FileSystemProvider("media")] public class MediaFileSystem : FileSystemWrapper { - public MediaFileSystem(IFileSystem wrapped, IContentSection contentConfig, IMediaPathScheme mediaPathScheme, ILogger logger) + public MediaFileSystem(IFileSystem wrapped) : base(wrapped) { - ContentConfig = contentConfig; - Logger = logger; - MediaPathScheme = mediaPathScheme; + ContentConfig = Current.Container.GetInstance(); + Logger = Current.Container.GetInstance(); + MediaPathScheme = Current.Container.GetInstance(); MediaPathScheme.Initialize(this); UploadAutoFillProperties = new UploadAutoFillProperties(this, Logger, ContentConfig); diff --git a/src/Umbraco.Tests/Models/MediaXmlTest.cs b/src/Umbraco.Tests/Models/MediaXmlTest.cs index b56a2257f1..29c936adb9 100644 --- a/src/Umbraco.Tests/Models/MediaXmlTest.cs +++ b/src/Umbraco.Tests/Models/MediaXmlTest.cs @@ -29,7 +29,7 @@ namespace Umbraco.Tests.Models // reference, so static ctor runs, so event handlers register // and then, this will reset the width, height... because the file does not exist, of course ;-( - var ignored = new FileUploadPropertyEditor(Mock.Of(), new MediaFileSystem(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of())); + var ignored = new FileUploadPropertyEditor(Mock.Of(), new MediaFileSystem(Mock.Of())); var media = MockedMedia.CreateMediaImage(mediaType, -1); media.WriterId = -1; // else it's zero and that's not a user and it breaks the tests diff --git a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs index 2c5bc621eb..f9093ad6fe 100644 --- a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs +++ b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs @@ -71,7 +71,7 @@ namespace Umbraco.Tests.PropertyEditors Current.Container.RegisterSingleton(f => Mock.Of()); Current.Container.RegisterSingleton(f => Mock.Of()); - var mediaFileSystem = new MediaFileSystem(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); + var mediaFileSystem = new MediaFileSystem(Mock.Of()); var dataTypeService = new TestObjects.TestDataTypeService( new DataType(new ImageCropperPropertyEditor(Mock.Of(), mediaFileSystem, Mock.Of())) { Id = 1 }); diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs b/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs index 19e5d12650..cc9418cc50 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects-Mocks.cs @@ -151,7 +151,7 @@ namespace Umbraco.Tests.TestHelpers MockFs(fileSystems, x => x.ScriptsFileSystem); MockFs(fileSystems, x => x.StylesheetsFileSystem); - var mediaFs = new MediaFileSystem(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); + var mediaFs = new MediaFileSystem(Mock.Of()); Mock.Get(fileSystems).Setup(x => x.MediaFileSystem).Returns(mediaFs); return fileSystems; diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index 00a193b40a..61860e29aa 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -115,7 +115,7 @@ namespace Umbraco.Tests.TestHelpers if (logger == null) throw new ArgumentNullException(nameof(logger)); if (eventMessagesFactory == null) throw new ArgumentNullException(nameof(eventMessagesFactory)); - var mediaFileSystem = new MediaFileSystem(Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()); + var mediaFileSystem = new MediaFileSystem(Mock.Of()); var externalLoginService = GetLazyService(container, c => new ExternalLoginService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); var publicAccessService = GetLazyService(container, c => new PublicAccessService(scopeProvider, logger, eventMessagesFactory, GetRepo(c)));