diff --git a/src/Umbraco.Core/Composing/Composers/ConfigurationComposer.cs b/src/Umbraco.Core/Composing/Composers/ConfigurationComposer.cs
new file mode 100644
index 0000000000..e2ba477045
--- /dev/null
+++ b/src/Umbraco.Core/Composing/Composers/ConfigurationComposer.cs
@@ -0,0 +1,25 @@
+using LightInject;
+using Umbraco.Core.Configuration;
+using Umbraco.Core.Configuration.UmbracoSettings;
+
+namespace Umbraco.Core.Composing.Composers
+{
+ ///
+ /// Sets up IoC container for Umbraco configuration classes
+ ///
+ public static class ConfigurationComposer
+ {
+ public static IServiceRegistry ComposeConfiguration(this IServiceRegistry registry)
+ {
+ registry.Register(factory => UmbracoConfig.For.UmbracoSettings());
+ registry.Register(factory => factory.GetInstance().Content);
+ registry.Register(factory => factory.GetInstance().Templates);
+ registry.Register(factory => factory.GetInstance().RequestHandler);
+ registry.Register(factory => UmbracoConfig.For.GlobalSettings());
+
+ // fixme - other sections we need to add?
+
+ return registry;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Composing/Composers/CoreMappingProfilesComposer.cs b/src/Umbraco.Core/Composing/Composers/CoreMappingProfilesComposer.cs
new file mode 100644
index 0000000000..ce9f507b9f
--- /dev/null
+++ b/src/Umbraco.Core/Composing/Composers/CoreMappingProfilesComposer.cs
@@ -0,0 +1,15 @@
+using LightInject;
+using Umbraco.Core.Models.Identity;
+
+namespace Umbraco.Core.Composing.Composers
+
+{
+ public static class CoreMappingProfilesComposer
+ {
+ public static IServiceRegistry ComposeCoreMappingProfiles(this IServiceRegistry registry)
+ {
+ registry.Register();
+ return registry;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Composing/Composers/FileSystemsComposer.cs b/src/Umbraco.Core/Composing/Composers/FileSystemsComposer.cs
new file mode 100644
index 0000000000..c7ed93680b
--- /dev/null
+++ b/src/Umbraco.Core/Composing/Composers/FileSystemsComposer.cs
@@ -0,0 +1,28 @@
+using LightInject;
+using Umbraco.Core.Configuration.UmbracoSettings;
+using Umbraco.Core.IO;
+using Umbraco.Core.Logging;
+
+namespace Umbraco.Core.Composing.Composers
+{
+ public static class FileSystemsComposer
+ {
+ public static IServiceRegistry ComposeFileSystems(this IServiceRegistry registry)
+ {
+ // register FileSystems, which manages all filesystems
+ registry.RegisterSingleton();
+
+ // register IFileSystems, which gives access too all filesystems
+ registry.RegisterSingleton(factory => factory.GetInstance());
+
+ // register MediaFileSystem, which can be injected directly
+ registry.RegisterSingleton(factory => factory.GetInstance().MediaFileSystem);
+
+ // register MediaFileSystem, so that FileSystems can create it
+ registry.Register((f, wrappedFileSystem)
+ => new MediaFileSystem(wrappedFileSystem, f.GetInstance(), f.GetInstance(), f.GetInstance()));
+
+ return registry;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Composing/Composers/RepositoriesComposer.cs b/src/Umbraco.Core/Composing/Composers/RepositoriesComposer.cs
new file mode 100644
index 0000000000..79b2b9c223
--- /dev/null
+++ b/src/Umbraco.Core/Composing/Composers/RepositoriesComposer.cs
@@ -0,0 +1,56 @@
+using LightInject;
+using Umbraco.Core.Persistence.Repositories;
+using Umbraco.Core.Persistence.Repositories.Implement;
+
+namespace Umbraco.Core.Composing.Composers
+{
+ ///
+ /// Composes repositories.
+ ///
+ public static class RepositoriesComposer
+ {
+ public static IServiceRegistry ComposeRepositories(this IServiceRegistry registry)
+ {
+ // repositories
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+
+ return registry;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Composing/Composers/ServicesComposer.cs b/src/Umbraco.Core/Composing/Composers/ServicesComposer.cs
new file mode 100644
index 0000000000..c774912f2e
--- /dev/null
+++ b/src/Umbraco.Core/Composing/Composers/ServicesComposer.cs
@@ -0,0 +1,95 @@
+using System;
+using System.IO;
+using System.Linq;
+using LightInject;
+using Umbraco.Core.Cache;
+using Umbraco.Core.Events;
+using Umbraco.Core.IO;
+using Umbraco.Core.Logging;
+using Umbraco.Core.Services;
+using Umbraco.Core.Services.Implement;
+
+namespace Umbraco.Core.Composing.Composers
+{
+ public static class ServicesComposer
+ {
+ public static IServiceRegistry ComposeServices(this IServiceRegistry registry)
+ {
+ // register a transient messages factory, which will be replaced by the web
+ // boot manager when running in a web context
+ registry.RegisterSingleton();
+
+ // register the service context
+ registry.RegisterSingleton();
+
+ // register the special idk map
+ registry.RegisterSingleton();
+
+ // register the services
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+ registry.Register(factory =>
+ {
+ var mainLangFolder = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.Umbraco + "/config/lang/"));
+ var appPlugins = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.AppPlugins));
+ var configLangFolder = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.Config + "/lang/"));
+
+ var pluginLangFolders = appPlugins.Exists == false
+ ? Enumerable.Empty()
+ : appPlugins.GetDirectories()
+ .SelectMany(x => x.GetDirectories("Lang"))
+ .SelectMany(x => x.GetFiles("*.xml", SearchOption.TopDirectoryOnly))
+ .Where(x => Path.GetFileNameWithoutExtension(x.FullName).Length == 5)
+ .Select(x => new LocalizedTextServiceSupplementaryFileSource(x, false));
+
+ //user defined langs that overwrite the default, these should not be used by plugin creators
+ var userLangFolders = configLangFolder.Exists == false
+ ? Enumerable.Empty()
+ : configLangFolder
+ .GetFiles("*.user.xml", SearchOption.TopDirectoryOnly)
+ .Where(x => Path.GetFileNameWithoutExtension(x.FullName).Length == 10)
+ .Select(x => new LocalizedTextServiceSupplementaryFileSource(x, true));
+
+ return new LocalizedTextServiceFileSources(
+ factory.GetInstance(),
+ factory.GetInstance().RuntimeCache,
+ mainLangFolder,
+ pluginLangFolders.Concat(userLangFolders));
+ });
+ registry.RegisterSingleton(factory => new LocalizedTextService(
+ factory.GetInstance>(),
+ factory.GetInstance()));
+
+ //TODO: These are replaced in the web project - we need to declare them so that
+ // something is wired up, just not sure this is very nice but will work for now.
+ registry.RegisterSingleton();
+ registry.RegisterSingleton();
+
+ return registry;
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Composing/CompositionRoots/ConfigurationCompositionRoot.cs b/src/Umbraco.Core/Composing/CompositionRoots/ConfigurationCompositionRoot.cs
deleted file mode 100644
index 82912163b6..0000000000
--- a/src/Umbraco.Core/Composing/CompositionRoots/ConfigurationCompositionRoot.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using LightInject;
-using Umbraco.Core.Configuration;
-using Umbraco.Core.Configuration.UmbracoSettings;
-
-namespace Umbraco.Core.Composing.CompositionRoots
-{
- ///
- /// Sets up IoC container for Umbraco configuration classes
- ///
- public sealed class ConfigurationCompositionRoot : ICompositionRoot
- {
- public void Compose(IServiceRegistry container)
- {
- container.Register(factory => UmbracoConfig.For.UmbracoSettings());
- container.Register(factory => factory.GetInstance().Content);
- container.Register(factory => factory.GetInstance().Templates);
- container.Register(factory => factory.GetInstance().RequestHandler);
- container.Register(factory => UmbracoConfig.For.GlobalSettings());
-
- // fixme - other sections we need to add?
- }
- }
-}
diff --git a/src/Umbraco.Core/Composing/CompositionRoots/CoreMappingProfilesCompositionRoot.cs b/src/Umbraco.Core/Composing/CompositionRoots/CoreMappingProfilesCompositionRoot.cs
deleted file mode 100644
index 6b55a4af7e..0000000000
--- a/src/Umbraco.Core/Composing/CompositionRoots/CoreMappingProfilesCompositionRoot.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using LightInject;
-using Umbraco.Core.Models.Identity;
-
-namespace Umbraco.Core.Composing.CompositionRoots
-{
- public sealed class CoreMappingProfilesCompositionRoot : ICompositionRoot
- {
- public void Compose(IServiceRegistry container)
- {
- container.Register();
- }
- }
-}
diff --git a/src/Umbraco.Core/Composing/CompositionRoots/RepositoryCompositionRoot.cs b/src/Umbraco.Core/Composing/CompositionRoots/RepositoryCompositionRoot.cs
deleted file mode 100644
index afea71a074..0000000000
--- a/src/Umbraco.Core/Composing/CompositionRoots/RepositoryCompositionRoot.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using System;
-using LightInject;
-using Umbraco.Core.Cache;
-using Umbraco.Core.Configuration.UmbracoSettings;
-using Umbraco.Core.IO;
-using Umbraco.Core.Logging;
-using Umbraco.Core.Persistence.Repositories;
-using Umbraco.Core.Persistence.Repositories.Implement;
-using Umbraco.Core.Scoping;
-
-namespace Umbraco.Core.Composing.CompositionRoots
-{
- ///
- /// Sets the IoC container for the umbraco data layer/repositories/sql/database/etc...
- ///
- public sealed class RepositoryCompositionRoot : ICompositionRoot
- {
- public const string DisabledCache = "DisabledCache";
-
- public void Compose(IServiceRegistry container)
- {
- // resolve ctor dependency from GetInstance() runtimeArguments, if possible - 'factory' is
- // the container, 'info' describes the ctor argument, and 'args' contains the args that
- // were passed to GetInstance() - use first arg if it is the right type,
- //
- // for ...
- //container.RegisterConstructorDependency((factory, info, args) =>
- //{
- // if (info.Member.DeclaringType != typeof(EntityContainerRepository)) return default;
- // return args.Length > 0 && args[0] is Guid guid ? guid : default;
- //});
-
- // register repositories
- // repos depend on various things,
- // some repositories have an annotated ctor parameter to pick the right cache helper
-
- // repositories
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton(f => new TemplateRepository( // fixme type the FS too! or?
- f.GetInstance(),
- f.GetInstance(),
- f.GetInstance(),
- f.GetInstance(),
- f.GetInstance(Constants.Composing.FileSystems.MasterpageFileSystem),
- f.GetInstance(Constants.Composing.FileSystems.ViewFileSystem)
- ));
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
-
- // repositories that depend on a filesystem
- // these have an annotated ctor parameter to pick the right file system
- container.RegisterSingleton(f => new PartialViewMacroRepository(f.GetInstance("PartialViewMacroFileSystem")));
- container.RegisterSingleton(f => new PartialViewRepository(f.GetInstance("PartialViewFileSystem")));
- container.RegisterSingleton(f => new ScriptRepository(f.GetInstance("ScriptFileSystem"), f.GetInstance()));
- container.RegisterSingleton(f => new StylesheetRepository(f.GetInstance("StylesheetFileSystem")));
- }
- }
-}
diff --git a/src/Umbraco.Core/Composing/CompositionRoots/ServicesCompositionRoot.cs b/src/Umbraco.Core/Composing/CompositionRoots/ServicesCompositionRoot.cs
deleted file mode 100644
index d126cd6aa3..0000000000
--- a/src/Umbraco.Core/Composing/CompositionRoots/ServicesCompositionRoot.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using System;
-using System.IO;
-using System.Linq;
-using LightInject;
-using Umbraco.Core.Cache;
-using Umbraco.Core.Events;
-using Umbraco.Core.IO;
-using Umbraco.Core.Logging;
-using Umbraco.Core.Services;
-using Umbraco.Core.Services.Implement;
-
-namespace Umbraco.Core.Composing.CompositionRoots
-{
- public sealed class ServicesCompositionRoot : ICompositionRoot
- {
- public void Compose(IServiceRegistry container)
- {
- // register a transient messages factory, which will be replaced by the web
- // boot manager when running in a web context
- container.RegisterSingleton();
-
- // register the service context
- container.RegisterSingleton();
-
- // register the special idk map
- container.RegisterSingleton();
-
- // register the services
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.RegisterSingleton();
- container.Register(factory =>
- {
- var mainLangFolder = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.Umbraco + "/config/lang/"));
- var appPlugins = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.AppPlugins));
- var configLangFolder = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.Config + "/lang/"));
-
- var pluginLangFolders = appPlugins.Exists == false
- ? Enumerable.Empty()
- : appPlugins.GetDirectories()
- .SelectMany(x => x.GetDirectories("Lang"))
- .SelectMany(x => x.GetFiles("*.xml", SearchOption.TopDirectoryOnly))
- .Where(x => Path.GetFileNameWithoutExtension(x.FullName).Length == 5)
- .Select(x => new LocalizedTextServiceSupplementaryFileSource(x, false));
-
- //user defined langs that overwrite the default, these should not be used by plugin creators
- var userLangFolders = configLangFolder.Exists == false
- ? Enumerable.Empty()
- : configLangFolder
- .GetFiles("*.user.xml", SearchOption.TopDirectoryOnly)
- .Where(x => Path.GetFileNameWithoutExtension(x.FullName).Length == 10)
- .Select(x => new LocalizedTextServiceSupplementaryFileSource(x, true));
-
- return new LocalizedTextServiceFileSources(
- factory.GetInstance(),
- factory.GetInstance().RuntimeCache,
- mainLangFolder,
- pluginLangFolders.Concat(userLangFolders));
- });
- container.RegisterSingleton(factory => new LocalizedTextService(
- factory.GetInstance>(),
- factory.GetInstance()));
-
- //TODO: These are replaced in the web project - we need to declare them so that
- // something is wired up, just not sure this is very nice but will work for now.
- container.RegisterSingleton();
- container.RegisterSingleton();
- }
- }
-}
diff --git a/src/Umbraco.Core/Composing/Current.cs b/src/Umbraco.Core/Composing/Current.cs
index 9e07b42dfb..fcff2c4b9e 100644
--- a/src/Umbraco.Core/Composing/Current.cs
+++ b/src/Umbraco.Core/Composing/Current.cs
@@ -101,8 +101,8 @@ namespace Umbraco.Core.Composing
public static TypeLoader TypeLoader
=> Container.GetInstance();
- public static FileSystems FileSystems
- => Container.GetInstance();
+ public static IFileSystems FileSystems
+ => Container.GetInstance();
public static UrlSegmentProviderCollection UrlSegmentProviders
=> Container.GetInstance();
diff --git a/src/Umbraco.Core/Composing/IContainer.cs b/src/Umbraco.Core/Composing/IContainer.cs
index 55d8ead361..7183a76af2 100644
--- a/src/Umbraco.Core/Composing/IContainer.cs
+++ b/src/Umbraco.Core/Composing/IContainer.cs
@@ -2,8 +2,6 @@
namespace Umbraco.Core.Composing
{
- // fixme - must document!
-
///
/// Defines a container for Umbraco.
///
@@ -14,13 +12,7 @@ namespace Umbraco.Core.Composing
///
object ConcreteContainer { get; }
- ///
- /// Gets an instance.
- ///
- /// The type of the instance.
- /// An instance of the specified type.
- /// Throws an exception if the container failed to get an instance of the specified type.
- T GetInstance();
+ #region Factory
///
/// Gets an instance.
@@ -30,18 +22,31 @@ namespace Umbraco.Core.Composing
/// Throws an exception if the container failed to get an instance of the specified type.
object GetInstance(Type type);
+ ///
+ /// Gets an instance with arguments.
+ ///
+ /// The type of the instance.
+ /// Arguments.
+ /// An instance of the specified type.
+ ///
+ /// Throws an exception if the container failed to get an instance of the specified type.
+ /// The arguments are used as dependencies by the container.
+ ///
+ object GetInstance(Type type, object[] args);
+
///
/// Tries to get an instance.
///
- /// The type of the instance.
+ /// The type of the instance.
/// An instance of the specified type, or null.
/// Returns null if the container does not know how to get an instance
/// of the specified type. Throws an exception if the container does know how
/// to get an instance of the specified type, but failed to do so.
- T TryGetInstance();
+ object TryGetInstance(Type type);
- // fixme document
- T GetInstance(object[] args);
+ #endregion
+
+ #region Registry
// fixme register direct type?
// fixme register an instance?
@@ -55,11 +60,7 @@ namespace Umbraco.Core.Composing
/// The type of the collection builder.
/// A collection builder of the specified type.
T RegisterCollectionBuilder();
- }
- public interface IRegistry
- {
- // everything register should be here
- // should a registry also be a container?
+ #endregion
}
}
diff --git a/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs b/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs
index 8eff2be60b..72ebda62ee 100644
--- a/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs
+++ b/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs
@@ -21,6 +21,18 @@ namespace Umbraco.Core.Composing.LightInject
///
public object ConcreteContainer => _container;
+ ///
+ public object GetInstance(Type type)
+ => _container.GetInstance(type);
+
+ ///
+ public object GetInstance(Type type, object[] args)
+ => _container.GetInstance(type, args);
+
+ ///
+ public object TryGetInstance(Type type)
+ => _container.TryGetInstance(type);
+
///
public void RegisterSingleton(Func factory)
=> _container.RegisterSingleton(f => factory(this));
@@ -36,21 +48,5 @@ namespace Umbraco.Core.Composing.LightInject
///
public T RegisterCollectionBuilder()
=> _container.RegisterCollectionBuilder();
-
- ///
- public T TryGetInstance()
- => _container.TryGetInstance();
-
- ///
- public T GetInstance()
- => _container.GetInstance();
-
- ///
- public T GetInstance(object[] args)
- => (T) _container.GetInstance(typeof(T), args);
-
- ///
- public object GetInstance(Type type)
- => _container.GetInstance(type);
}
}
diff --git a/src/Umbraco.Core/Constants-Composing.cs b/src/Umbraco.Core/Constants-Composing.cs
index 1e8c9886d2..e65629a278 100644
--- a/src/Umbraco.Core/Constants-Composing.cs
+++ b/src/Umbraco.Core/Constants-Composing.cs
@@ -9,20 +9,6 @@
/// Defines constants for composition.
///
public static class Composing
- {
- ///
- /// Defines file system names.
- ///
- public static class FileSystems
- {
- public const string ScriptFileSystem = "ScriptFileSystem";
- public const string PartialViewFileSystem = "PartialViewFileSystem";
- public const string PartialViewMacroFileSystem = "PartialViewMacroFileSystem";
- public const string StylesheetFileSystem = "StylesheetFileSystem";
- public const string MasterpageFileSystem = "MasterpageFileSystem";
- public const string ViewFileSystem = "ViewFileSystem";
- public const string JavascriptLibraryFileSystem = "JavascriptLibraryFileSystem";
- }
- }
+ { }
}
}
diff --git a/src/Umbraco.Core/ContainerExtensions.cs b/src/Umbraco.Core/ContainerExtensions.cs
new file mode 100644
index 0000000000..351a3c26f1
--- /dev/null
+++ b/src/Umbraco.Core/ContainerExtensions.cs
@@ -0,0 +1,45 @@
+using Umbraco.Core.Composing;
+
+namespace Umbraco.Core
+{
+ ///
+ /// Provides extension methods to the class.
+ ///
+ public static class ContainerExtensions
+ {
+ ///
+ /// Gets an instance.
+ ///
+ /// The type of the instance.
+ /// The container.
+ /// An instance of the specified type.
+ /// Throws an exception if the container failed to get an instance of the specified type.
+ public static T GetInstance(this IContainer container)
+ => (T) container.GetInstance(typeof(T));
+
+ ///
+ /// Gets an instance with arguments.
+ ///
+ /// The type of the instance.
+ /// The container.
+ /// Arguments.
+ /// An instance of the specified type.
+ ///
+ /// Throws an exception if the container failed to get an instance of the specified type.
+ /// The arguments are used as dependencies by the container.
+ ///
+ public static T GetInstance(this IContainer container, object[] args)
+ => (T) container.GetInstance(typeof(T), args);
+
+ ///
+ /// Tries to get an instance.
+ ///
+ /// The type of the instance.
+ /// An instance of the specified type, or null.
+ /// Returns null if the container does not know how to get an instance
+ /// of the specified type. Throws an exception if the container does know how
+ /// to get an instance of the specified type, but failed to do so.
+ public static T TryGetInstance(this IContainer container)
+ => (T) container.TryGetInstance(typeof(T));
+ }
+}
diff --git a/src/Umbraco.Core/IO/FileSystems.cs b/src/Umbraco.Core/IO/FileSystems.cs
index af6d176794..ab7f75a521 100644
--- a/src/Umbraco.Core/IO/FileSystems.cs
+++ b/src/Umbraco.Core/IO/FileSystems.cs
@@ -12,7 +12,18 @@ using Umbraco.Core.Composing;
namespace Umbraco.Core.IO
{
- public class FileSystems
+ public interface IFileSystems // fixme move!
+ {
+ IFileSystem MacroPartialsFileSystem { get; }
+ IFileSystem PartialViewsFileSystem { get; }
+ IFileSystem StylesheetsFileSystem { get; }
+ IFileSystem ScriptsFileSystem { get; }
+ IFileSystem MasterPagesFileSystem { get; }
+ IFileSystem MvcViewsFileSystem { get; }
+ MediaFileSystem MediaFileSystem { get; }
+ }
+
+ public class FileSystems : IFileSystems
{
private readonly IFileSystemProvidersSection _config;
private readonly ConcurrentSet _wrappers = new ConcurrentSet();
@@ -36,10 +47,6 @@ namespace Umbraco.Core.IO
private MediaFileSystem _mediaFileSystem;
-
- //fixme - is this needed to be a managed file system? seems irrelevant since it won't ever be moved and is only used in one place in code
- private IFileSystem _javascriptLibraryFileSystem;
-
#region Constructor
// DI wants a public ctor
@@ -129,16 +136,6 @@ namespace Umbraco.Core.IO
}
}
- //fixme - is this needed to be a managed file system? seems irrelevant since it won't ever be moved and is only used in one place in code
- internal IFileSystem JavaScriptLibraryFileSystem
- {
- get
- {
- if (Volatile.Read(ref _wkfsInitialized) == false) EnsureWellKnownFileSystems();
- return _javascriptLibraryFileSystem;
- }
- }
-
private void EnsureWellKnownFileSystems()
{
LazyInitializer.EnsureInitialized(ref _wkfsObject, ref _wkfsInitialized, ref _wkfsLock, CreateWellKnownFileSystems);
@@ -154,7 +151,6 @@ namespace Umbraco.Core.IO
var scriptsFileSystem = new PhysicalFileSystem(SystemDirectories.Scripts);
var masterPagesFileSystem = new PhysicalFileSystem(SystemDirectories.Masterpages);
var mvcViewsFileSystem = new PhysicalFileSystem(SystemDirectories.MvcViews);
- var javaScriptLibraryFileSystem = new PhysicalFileSystem(SystemDirectories.JavaScriptLibrary);
_macroPartialFileSystem = new ShadowWrapper(macroPartialFileSystem, "Views/MacroPartials", () => IsScoped());
_partialViewsFileSystem = new ShadowWrapper(partialViewsFileSystem, "Views/Partials", () => IsScoped());
@@ -162,7 +158,6 @@ namespace Umbraco.Core.IO
_scriptsFileSystem = new ShadowWrapper(scriptsFileSystem, "scripts", () => IsScoped());
_masterPagesFileSystem = new ShadowWrapper(masterPagesFileSystem, "masterpages", () => IsScoped());
_mvcViewsFileSystem = new ShadowWrapper(mvcViewsFileSystem, "Views", () => IsScoped());
- _javascriptLibraryFileSystem = new ShadowWrapper(javaScriptLibraryFileSystem, "Lib", () => IsScoped());
// filesystems obtained from GetFileSystemProvider are already wrapped and do not need to be wrapped again
_mediaFileSystem = GetFileSystemProvider();
@@ -190,7 +185,7 @@ namespace Umbraco.Core.IO
/// The alias of the strongly-typed filesystem.
/// The non-typed filesystem supporting the strongly-typed filesystem with the specified alias.
/// This method should not be used directly, used instead.
- public IFileSystem GetUnderlyingFileSystemProvider(string alias)
+ internal IFileSystem GetUnderlyingFileSystemProvider(string alias)
{
return GetUnderlyingFileSystemProvider(alias, null);
}
@@ -303,10 +298,8 @@ namespace Umbraco.Core.IO
var innerFs = GetUnderlyingFileSystemNoCache(alias, fallback);
var shadowWrapper = new ShadowWrapper(innerFs, "typed/" + alias, () => IsScoped());
- // fixme - switch to using container. where are these registered?
-
- //var fs = (IFileSystem) Activator.CreateInstance(typeof(TFileSystem), shadowWrapper);
- var fs = Current.Container.GetInstance(new object[] { (IFileSystem)shadowWrapper });
+ // getting the fs from the container - see FileSystemsComposer
+ var fs = Current.Container.GetInstance(new object[] { (IFileSystem) 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 77638d171a..47f9f14423 100644
--- a/src/Umbraco.Core/IO/MediaFileSystem.cs
+++ b/src/Umbraco.Core/IO/MediaFileSystem.cs
@@ -1,15 +1,11 @@
using System;
using System.Collections.Generic;
using System.Drawing;
-using System.Globalization;
using System.IO;
using System.Linq;
-using System.Threading;
using System.Threading.Tasks;
-using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Exceptions;
-using Umbraco.Core.IO.MediaPathSchemes;
using Umbraco.Core.Logging;
using Umbraco.Core.Media;
using Umbraco.Core.Media.Exif;
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs
index 879766fc81..d707bcee10 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewMacroRepository.cs
@@ -5,9 +5,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
{
internal class PartialViewMacroRepository : PartialViewRepository, IPartialViewMacroRepository
{
-
- public PartialViewMacroRepository(IFileSystem fileSystem)
- : base(fileSystem)
+ public PartialViewMacroRepository(IFileSystems fileSystems)
+ : base(fileSystems.MacroPartialsFileSystem)
{ }
protected override PartialViewType ViewType => PartialViewType.PartialViewMacro;
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs
index a996251927..d04bc47cd8 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/PartialViewRepository.cs
@@ -9,7 +9,11 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
{
internal class PartialViewRepository : FileRepository, IPartialViewRepository
{
- public PartialViewRepository(IFileSystem fileSystem)
+ public PartialViewRepository(IFileSystems fileSystems)
+ : base(fileSystems.PartialViewsFileSystem)
+ { }
+
+ protected PartialViewRepository(IFileSystem fileSystem)
: base(fileSystem)
{ }
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/ScriptRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/ScriptRepository.cs
index 735a1aa74f..85b41a2a1c 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/ScriptRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/ScriptRepository.cs
@@ -15,8 +15,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
{
private readonly IContentSection _contentConfig;
- public ScriptRepository(IFileSystem fileSystem, IContentSection contentConfig)
- : base(fileSystem)
+ public ScriptRepository(IFileSystems fileSystems, IContentSection contentConfig)
+ : base(fileSystems.ScriptsFileSystem)
{
_contentConfig = contentConfig ?? throw new ArgumentNullException(nameof(contentConfig));
}
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/StylesheetRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/StylesheetRepository.cs
index 8139f4948e..4c02a8f4b5 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/StylesheetRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/StylesheetRepository.cs
@@ -11,8 +11,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
///
internal class StylesheetRepository : FileRepository, IStylesheetRepository
{
- public StylesheetRepository(IFileSystem fileSystem)
- : base(fileSystem)
+ public StylesheetRepository(IFileSystems fileSystems)
+ : base(fileSystems.StylesheetsFileSystem)
{ }
#region Overrides of FileRepository
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs
index 6541876b67..ba4e22de41 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/TemplateRepository.cs
@@ -29,13 +29,11 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
private readonly ViewHelper _viewHelper;
private readonly MasterPageHelper _masterPageHelper;
- public TemplateRepository(IScopeAccessor scopeAccessor, CacheHelper cache, ILogger logger, ITemplatesSection templateConfig,
- IFileSystem masterpageFileSystem,
- IFileSystem viewFileSystem)
+ public TemplateRepository(IScopeAccessor scopeAccessor, CacheHelper cache, ILogger logger, ITemplatesSection templateConfig, IFileSystems fileSystems)
: base(scopeAccessor, cache, logger)
{
- _masterpagesFileSystem = masterpageFileSystem;
- _viewsFileSystem = viewFileSystem;
+ _masterpagesFileSystem = fileSystems.MasterPagesFileSystem;
+ _viewsFileSystem = fileSystems.MvcViewsFileSystem;
_templateConfig = templateConfig;
_viewHelper = new ViewHelper(_viewsFileSystem);
_masterPageHelper = new MasterPageHelper(_masterpagesFileSystem);
@@ -151,7 +149,7 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
//Save to db
var template = (Template)entity;
template.AddingEntity();
-
+
var dto = TemplateFactory.BuildDto(template, NodeObjectTypeId, template.Id);
//Create the (base) node data - umbracoNode
diff --git a/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs b/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs
index 2b82ec7fac..8d2a230fec 100644
--- a/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs
+++ b/src/Umbraco.Core/Persistence/UmbracoDatabaseFactory.cs
@@ -50,7 +50,7 @@ namespace Umbraco.Core.Persistence
///
/// Initializes a new instance of the .
///
- /// Used by LightInject.
+ /// Used by injection.
public UmbracoDatabaseFactory(IEnumerable sqlSyntaxProviders, ILogger logger, IMapperCollection mappers)
: this(Constants.System.UmbracoConnectionName, sqlSyntaxProviders, logger, mappers)
{
diff --git a/src/Umbraco.Core/Runtime/CoreRuntime.cs b/src/Umbraco.Core/Runtime/CoreRuntime.cs
index 93f475f7a6..94004c6ae3 100644
--- a/src/Umbraco.Core/Runtime/CoreRuntime.cs
+++ b/src/Umbraco.Core/Runtime/CoreRuntime.cs
@@ -7,7 +7,7 @@ using LightInject;
using Umbraco.Core.Cache;
using Umbraco.Core.Components;
using Umbraco.Core.Composing;
-using Umbraco.Core.Composing.CompositionRoots;
+using Umbraco.Core.Composing.Composers;
using Umbraco.Core.Configuration;
using Umbraco.Core.Exceptions;
using Umbraco.Core.IO;
@@ -195,7 +195,7 @@ namespace Umbraco.Core.Runtime
container.RegisterSingleton();
container.RegisterSingleton();
- container.RegisterFrom();
+ container.ComposeConfiguration();
// register caches
// need the deep clone runtime cache profiver to ensure entities are cached properly, ie
diff --git a/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs b/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs
index ce249d6b4a..4d1fd28462 100644
--- a/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs
+++ b/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs
@@ -7,7 +7,7 @@ using LightInject;
using Umbraco.Core.Cache;
using Umbraco.Core.Components;
using Umbraco.Core.Composing;
-using Umbraco.Core.Composing.CompositionRoots;
+using Umbraco.Core.Composing.Composers;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.IO;
@@ -35,29 +35,16 @@ namespace Umbraco.Core.Runtime
{
base.Compose(composition);
- // register from roots
- composition.Container.RegisterFrom();
- composition.Container.RegisterFrom();
- composition.Container.RegisterFrom();
+ // composers
+ composition.Container.ComposeRepositories();
+ composition.Container.ComposeServices();
+ composition.Container.ComposeCoreMappingProfiles();
+ composition.Container.ComposeFileSystems();
// register database builder
// *not* a singleton, don't want to keep it around
composition.Container.Register();
- // register filesystems
-
- composition.Container.Register((f, wrappedFileSystem) => new MediaFileSystem(wrappedFileSystem, f.GetInstance(), f.GetInstance(), f.GetInstance()));
- composition.Container.RegisterConstructorDependency((factory, parameterInfo) => factory.GetInstance().MediaFileSystem);
-
- composition.Container.RegisterSingleton();
- composition.Container.RegisterSingleton(factory => factory.GetInstance().MediaFileSystem);
- composition.Container.RegisterSingleton(factory => factory.GetInstance().ScriptsFileSystem, Constants.Composing.FileSystems.ScriptFileSystem);
- composition.Container.RegisterSingleton(factory => factory.GetInstance().PartialViewsFileSystem, Constants.Composing.FileSystems.PartialViewFileSystem);
- composition.Container.RegisterSingleton(factory => factory.GetInstance().MacroPartialsFileSystem, Constants.Composing.FileSystems.PartialViewMacroFileSystem);
- composition.Container.RegisterSingleton(factory => factory.GetInstance().StylesheetsFileSystem, Constants.Composing.FileSystems.StylesheetFileSystem);
- composition.Container.RegisterSingleton(factory => factory.GetInstance().MasterPagesFileSystem, Constants.Composing.FileSystems.MasterpageFileSystem);
- composition.Container.RegisterSingleton(factory => factory.GetInstance().MvcViewsFileSystem, Constants.Composing.FileSystems.ViewFileSystem);
-
// register manifest parser, will be injected in collection builders where needed
composition.Container.RegisterSingleton();
diff --git a/src/Umbraco.Core/Services/ServiceContext.cs b/src/Umbraco.Core/Services/ServiceContext.cs
index aa618e7927..b14158efd5 100644
--- a/src/Umbraco.Core/Services/ServiceContext.cs
+++ b/src/Umbraco.Core/Services/ServiceContext.cs
@@ -134,7 +134,7 @@ namespace Umbraco.Core.Services
if (redirectUrlService != null) _redirectUrlService = new Lazy(() => redirectUrlService);
if (consentService != null) _consentService = new Lazy(() => consentService);
}
-
+
///
/// Gets the
///
diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj
index 7bcd3dccae..49990db5de 100644
--- a/src/Umbraco.Core/Umbraco.Core.csproj
+++ b/src/Umbraco.Core/Umbraco.Core.csproj
@@ -158,10 +158,11 @@
-
-
-
-
+
+
+
+
+
@@ -305,6 +306,7 @@
+
diff --git a/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs b/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs
index 74a47300ff..3d33604870 100644
--- a/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs
+++ b/src/Umbraco.Tests/FrontEnd/UmbracoHelperTests.cs
@@ -1,14 +1,12 @@
using System;
using System.Collections.Generic;
using System.Text;
-using LightInject;
using Moq;
using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Tests.TestHelpers;
using Umbraco.Core.Cache;
using Umbraco.Core.Composing;
-using Umbraco.Core.Composing.LightInject;
using Umbraco.Core.Logging;
using Umbraco.Web;
diff --git a/src/Umbraco.Tests/Models/ContentTests.cs b/src/Umbraco.Tests/Models/ContentTests.cs
index 01b08d9ae9..ba1a4e739c 100644
--- a/src/Umbraco.Tests/Models/ContentTests.cs
+++ b/src/Umbraco.Tests/Models/ContentTests.cs
@@ -41,6 +41,7 @@ namespace Umbraco.Tests.Models
Container.Register(_ => Mock.Of());
Container.Register((factory, fileSystem) => new MediaFileSystem(fileSystem, factory.GetInstance(), factory.GetInstance(), factory.GetInstance()));
Container.Register();
+ Container.Register(factory => factory.GetInstance());
Container.Register(_ => Mock.Of());
Container.Register(_ => Mock.Of());
}
diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs
index 29de77e6d8..2a3b197218 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs
@@ -63,7 +63,7 @@ namespace Umbraco.Tests.Persistence.Repositories
{
cacheHelper = cacheHelper ?? CacheHelper;
- templateRepository = new TemplateRepository(scopeAccessor, cacheHelper, Logger, Mock.Of(), Mock.Of(), Mock.Of());
+ templateRepository = new TemplateRepository(scopeAccessor, cacheHelper, Logger, Mock.Of(), TestObjects.GetFileSystemsMock());
var tagRepository = new TagRepository(scopeAccessor, cacheHelper, Logger);
contentTypeRepository = new ContentTypeRepository(scopeAccessor, cacheHelper, Logger, templateRepository);
var languageRepository = new LanguageRepository(scopeAccessor, cacheHelper, Logger);
diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs
index 9be7fe434a..e4f794763d 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/ContentTypeRepositoryTest.cs
@@ -36,7 +36,7 @@ namespace Umbraco.Tests.Persistence.Repositories
private DocumentRepository CreateRepository(IScopeAccessor scopeAccessor, out ContentTypeRepository contentTypeRepository)
{
var cacheHelper = CacheHelper.Disabled;
- var templateRepository = new TemplateRepository(scopeAccessor, cacheHelper, Logger, Mock.Of(), Mock.Of(), Mock.Of());
+ var templateRepository = new TemplateRepository(scopeAccessor, cacheHelper, Logger, Mock.Of(), TestObjects.GetFileSystemsMock());
var tagRepository = new TagRepository(scopeAccessor, cacheHelper, Logger);
contentTypeRepository = new ContentTypeRepository(scopeAccessor, cacheHelper, Logger, templateRepository);
var languageRepository = new LanguageRepository(scopeAccessor, cacheHelper, Logger);
@@ -46,7 +46,7 @@ namespace Umbraco.Tests.Persistence.Repositories
private ContentTypeRepository CreateRepository(IScopeAccessor scopeAccessor)
{
- var templateRepository = new TemplateRepository(scopeAccessor, CacheHelper.Disabled, Logger, Mock.Of(), Mock.Of(), Mock.Of());
+ var templateRepository = new TemplateRepository(scopeAccessor, CacheHelper.Disabled, Logger, Mock.Of(), TestObjects.GetFileSystemsMock());
var contentTypeRepository = new ContentTypeRepository(scopeAccessor, CacheHelper.Disabled, Logger, templateRepository);
return contentTypeRepository;
}
@@ -72,7 +72,7 @@ namespace Umbraco.Tests.Persistence.Repositories
var provider = TestObjects.GetScopeProvider(Logger);
using (var scope = provider.CreateScope())
{
- var templateRepo = new TemplateRepository((IScopeAccessor) provider, CacheHelper.Disabled, Logger, Mock.Of(), Mock.Of(), Mock.Of());
+ var templateRepo = new TemplateRepository((IScopeAccessor) provider, CacheHelper.Disabled, Logger, Mock.Of(), TestObjects.GetFileSystemsMock());
var repository = CreateRepository((IScopeAccessor) provider);
var templates = new[]
{
diff --git a/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs
index 070ef781cf..a5402f964e 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/DomainRepositoryTest.cs
@@ -22,7 +22,7 @@ namespace Umbraco.Tests.Persistence.Repositories
private DomainRepository CreateRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository, out DocumentRepository documentRepository, out LanguageRepository languageRepository)
{
var accessor = (IScopeAccessor) provider;
- var templateRepository = new TemplateRepository(accessor, Core.Cache.CacheHelper.Disabled, Logger, Mock.Of(), Mock.Of(), Mock.Of());
+ var templateRepository = new TemplateRepository(accessor, Core.Cache.CacheHelper.Disabled, Logger, Mock.Of(), TestObjects.GetFileSystemsMock());
var tagRepository = new TagRepository(accessor, Core.Cache.CacheHelper.Disabled, Logger);
contentTypeRepository = new ContentTypeRepository(accessor, Core.Cache.CacheHelper.Disabled, Logger, templateRepository);
languageRepository = new LanguageRepository(accessor, Core.Cache.CacheHelper.Disabled, Logger);
diff --git a/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs b/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs
index cf307d2ea9..79cb1dd4f1 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs
@@ -1,4 +1,5 @@
using System.Linq;
+using Moq;
using NUnit.Framework;
using Umbraco.Core.IO;
using Umbraco.Core.Models;
@@ -37,10 +38,13 @@ namespace Umbraco.Tests.Persistence.Repositories
{
// unless noted otherwise, no changes / 7.2.8
+ var fileSystems = Mock.Of();
+ Mock.Get(fileSystems).Setup(x => x.PartialViewsFileSystem).Returns(_fileSystem);
+
var provider = TestObjects.GetScopeProvider(Logger);
using (var scope = provider.CreateScope())
{
- var repository = new PartialViewRepository(_fileSystem);
+ var repository = new PartialViewRepository(fileSystems);
var partialView = new PartialView(PartialViewType.PartialView, "test-path-1.cshtml") { Content = "// partialView" };
repository.Save(partialView);
diff --git a/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs
index 39b3b0f797..e76d794e69 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/PublicAccessRepositoryTest.cs
@@ -307,7 +307,7 @@ namespace Umbraco.Tests.Persistence.Repositories
private DocumentRepository CreateRepository(IScopeProvider provider, out ContentTypeRepository contentTypeRepository)
{
var accessor = (IScopeAccessor) provider;
- var templateRepository = new TemplateRepository(accessor, CacheHelper, Logger, Mock.Of(), Mock.Of(), Mock.Of());
+ var templateRepository = new TemplateRepository(accessor, CacheHelper, Logger, Mock.Of(), TestObjects.GetFileSystemsMock());
var tagRepository = new TagRepository(accessor, CacheHelper, Logger);
contentTypeRepository = new ContentTypeRepository(accessor, CacheHelper, Logger, templateRepository);
var languageRepository = new LanguageRepository(accessor, CacheHelper, Logger);
diff --git a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs
index 755682a913..e414fc1c3a 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs
@@ -7,10 +7,8 @@ using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Composing;
using Umbraco.Core.IO;
using Umbraco.Core.Models;
-using Umbraco.Core.Persistence.Repositories;
using Umbraco.Core.Persistence.Repositories.Implement;
using Umbraco.Core.PropertyEditors;
-using Umbraco.Core.Scoping;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing;
@@ -20,13 +18,16 @@ namespace Umbraco.Tests.Persistence.Repositories
[UmbracoTest(WithApplication = true, Database = UmbracoTestOptions.Database.NewEmptyPerFixture)]
public class ScriptRepositoryTest : TestWithDatabaseBase
{
+ private IFileSystems _fileSystems;
private IFileSystem _fileSystem;
public override void SetUp()
{
base.SetUp();
+ _fileSystems = Mock.Of