diff --git a/src/Umbraco.Core/Components/Composition.cs b/src/Umbraco.Core/Components/Composition.cs index 6032dd303d..c81fe388ba 100644 --- a/src/Umbraco.Core/Components/Composition.cs +++ b/src/Umbraco.Core/Components/Composition.cs @@ -78,13 +78,17 @@ namespace Umbraco.Core.Components => _register.RegisterAuto(serviceBaseType); /// - public IContainer ConfigureForWeb() + public void ConfigureForWeb() => _register.ConfigureForWeb(); /// - public IContainer EnablePerWebRequestScope() + public void EnablePerWebRequestScope() => _register.EnablePerWebRequestScope(); + /// + public IFactory CreateFactory() + => _register.CreateFactory(); + #endregion #region Collection Builders diff --git a/src/Umbraco.Core/Composing/FactoryExtensions.cs b/src/Umbraco.Core/Composing/FactoryExtensions.cs new file mode 100644 index 0000000000..2640b7f7e6 --- /dev/null +++ b/src/Umbraco.Core/Composing/FactoryExtensions.cs @@ -0,0 +1,87 @@ +using System; +using System.Linq; +using System.Reflection; + +namespace Umbraco.Core.Composing +{ + /// + /// Provides extension methods to the class. + /// + public static class FactoryExtensions + { + /// + /// Gets an instance of a service. + /// + /// The type of the service. + /// The factory. + /// An instance of the specified type. + /// Throws an exception if the factory failed to get an instance of the specified type. + public static T GetInstance(this IFactory factory) + => (T)factory.GetInstance(typeof(T)); + + /// + /// Tries to get an instance of a service. + /// + /// The type of the service. + /// An instance of the specified type, or null. + /// Returns null if the factory does not know how to get an instance + /// of the specified type. Throws an exception if the factory does know how + /// to get an instance of the specified type, but failed to do so. + public static T TryGetInstance(this IFactory factory) + => (T)factory.TryGetInstance(typeof(T)); + + /// + /// Creates an instance with arguments. + /// + /// The type of the instance. + /// The factory. + /// Arguments. + /// An instance of the specified type. + /// + /// Throws an exception if the factory failed to get an instance of the specified type. + /// The arguments are used as dependencies by the factory. + /// + public static T CreateInstance(this IFactory factory, params object[] args) + => (T)factory.CreateInstance(typeof(T), args); + + /// + /// Creates an instance of a service, with arguments. + /// + /// + /// The type of the instance. + /// Named arguments. + /// An instance of the specified type. + /// + /// The instance type does not need to be registered into the factory. + /// The arguments are used as dependencies by the factory. Other dependencies + /// are retrieved from the factory. + /// + public static object CreateInstance(this IFactory factory, Type type, params object[] args) + { + // LightInject has this, but then it requires RegisterConstructorDependency etc and has various oddities + // including the most annoying one, which is that it does not work on singletons (hard to fix) + //return factory.GetInstance(type, args); + + // this method is essentially used to build singleton instances, so it is assumed that it would be + // more expensive to build and cache a dynamic method ctor than to simply invoke the ctor, as we do + // here - this can be discussed + + // TODO: we currently try the ctor with most parameters, but we could want to fall back to others + + var ctor = type.GetConstructors(BindingFlags.Instance | BindingFlags.Public).OrderByDescending(x => x.GetParameters().Length).FirstOrDefault(); + if (ctor == null) throw new InvalidOperationException($"Could not find a public constructor for type {type.FullName}."); + + var ctorParameters = ctor.GetParameters(); + var ctorArgs = new object[ctorParameters.Length]; + var i = 0; + foreach (var parameter in ctorParameters) + { + // no! IsInstanceOfType is not ok here + // ReSharper disable once UseMethodIsInstanceOfType + var arg = args?.FirstOrDefault(a => parameter.ParameterType.IsAssignableFrom(a.GetType())); + ctorArgs[i++] = arg ?? factory.GetInstance(parameter.ParameterType); + } + return ctor.Invoke(ctorArgs); + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Composing/IContainer.cs b/src/Umbraco.Core/Composing/IContainer.cs deleted file mode 100644 index 22b6ac3eae..0000000000 --- a/src/Umbraco.Core/Composing/IContainer.cs +++ /dev/null @@ -1,149 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Umbraco.Core.Composing -{ - // Implementing IContainer: - // - // The factory - // - always picks the constructor with the most parameters - // - supports Lazy parameters (and prefers them over non-Lazy) in constructors - // - what happens with 'releasing' is unclear - // - // The registry - // - supports registering a service, even after some instances of other services have been created - // - supports re-registering a service, as long as no instance of that service has been created - // - throws when re-registering a service, and an instance of that service has been created - // - // - registers only one implementation of a nameless service, re-registering replaces the previous - // registration - names are required to register multiple implementations - and getting an - // IEnumerable of the service, nameless, returns them all - - /// - /// Defines a service register for Umbraco. - /// - public interface IRegister - { - /// - /// Gets the concrete container. - /// - object ConcreteContainer { get; } - - /// - /// Registers a service as its own implementation. - /// - void Register(Type serviceType, Lifetime lifetime = Lifetime.Transient); - - /// - /// Registers a service with an implementation type. - /// - void Register(Type serviceType, Type implementingType, Lifetime lifetime = Lifetime.Transient); - - /// - /// Registers a service with an implementation factory. - /// - void Register(Func factory, Lifetime lifetime = Lifetime.Transient); - - /// - /// Registers a service with an implementing instance. - /// - void RegisterInstance(Type serviceType, object instance); - - /// - /// Registers a base type for auto-registration. - /// - /// - /// Auto-registration means that anytime the container is asked to create an instance - /// of a type deriving from , it will first register that - /// type automatically. - /// This can be used for instance for views or controllers. Then, one just needs to - /// register a common base class or interface, and the container knows how to create instances. - /// - void RegisterAuto(Type serviceBaseType); - - #region Control - - /// - /// Configures the container for web support. - /// - /// The container. - /// - /// Enables support for MVC, WebAPI, but *not* per-request scope. This is used early in the boot - /// process, where anything "scoped" should not be linked to a web request. - /// - IContainer ConfigureForWeb(); - - /// - /// Enables per-request scope. - /// - /// The container. - /// - /// Ties scopes to web requests. - /// - IContainer EnablePerWebRequestScope(); - - #endregion - } - - /// - /// Defines a service factory for Umbraco. - /// - public interface IFactory - { - /// - /// Gets an instance of a service. - /// - /// The type of the service. - /// An instance of the specified type. - /// Throws an exception if the container failed to get an instance of the specified type. - object GetInstance(Type type); - - /// - /// Tries to get an instance of a service. - /// - /// The type of the service. - /// 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. - object TryGetInstance(Type type); - - /// - /// Gets all instances of a service. - /// - /// The type of the service. - IEnumerable GetAllInstances(Type serviceType); - - /// - /// Gets all instances of a service. - /// - /// The type of the service. - IEnumerable GetAllInstances(); - - /// - /// Releases an instance. - /// - /// The instance. - /// - /// See https://stackoverflow.com/questions/14072208 and http://kozmic.net/2010/08/27/must-i-release-everything-when-using-windsor/, - /// you only need to release instances you specifically resolved, and even then, if done right, that might never be needed. For - /// instance, LightInject does not require this and does not support it - should work with scopes. - /// - void Release(object instance); - - /// - /// Begins a scope. - /// - /// - /// When the scope is disposed, scoped instances that have been created during the scope are disposed. - /// Scopes can be nested. Each instance is disposed individually. - /// - IDisposable BeginScope(); - } - - /// - /// Defines a container for Umbraco. - /// - public interface IContainer : IRegister, IFactory, IDisposable // fixme kill? - { } -} diff --git a/src/Umbraco.Core/Composing/IFactory.cs b/src/Umbraco.Core/Composing/IFactory.cs new file mode 100644 index 0000000000..3e8cdf08e0 --- /dev/null +++ b/src/Umbraco.Core/Composing/IFactory.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; + +namespace Umbraco.Core.Composing +{ + // Implementing: + // + // The factory + // - always picks the constructor with the most parameters + // - supports Lazy parameters (and prefers them over non-Lazy) in constructors + // - what happens with 'releasing' is unclear + + /// + /// Defines a service factory for Umbraco. + /// + public interface IFactory + { + /// + /// Gets an instance of a service. + /// + /// The type of the service. + /// An instance of the specified type. + /// Throws an exception if the container failed to get an instance of the specified type. + object GetInstance(Type type); + + /// + /// Tries to get an instance of a service. + /// + /// The type of the service. + /// 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. + object TryGetInstance(Type type); + + /// + /// Gets all instances of a service. + /// + /// The type of the service. + IEnumerable GetAllInstances(Type serviceType); + + /// + /// Gets all instances of a service. + /// + /// The type of the service. + IEnumerable GetAllInstances(); + + /// + /// Releases an instance. + /// + /// The instance. + /// + /// See https://stackoverflow.com/questions/14072208 and http://kozmic.net/2010/08/27/must-i-release-everything-when-using-windsor/, + /// you only need to release instances you specifically resolved, and even then, if done right, that might never be needed. For + /// instance, LightInject does not require this and does not support it - should work with scopes. + /// + void Release(object instance); + + /// + /// Begins a scope. + /// + /// + /// When the scope is disposed, scoped instances that have been created during the scope are disposed. + /// Scopes can be nested. Each instance is disposed individually. + /// + IDisposable BeginScope(); + } +} diff --git a/src/Umbraco.Core/Composing/IRegister.cs b/src/Umbraco.Core/Composing/IRegister.cs new file mode 100644 index 0000000000..1ce7ae9f0b --- /dev/null +++ b/src/Umbraco.Core/Composing/IRegister.cs @@ -0,0 +1,84 @@ +using System; + +namespace Umbraco.Core.Composing +{ + // Implementing: + // + // The register + // - supports registering a service, even after some instances of other services have been created + // - supports re-registering a service, as long as no instance of that service has been created + // - throws when re-registering a service, and an instance of that service has been created + // + // - registers only one implementation of a nameless service, re-registering replaces the previous + // registration - names are required to register multiple implementations - and getting an + // IEnumerable of the service, nameless, returns them all + + /// + /// Defines a service register for Umbraco. + /// + public interface IRegister + { + /// + /// Gets the concrete container. + /// + object ConcreteContainer { get; } + + /// + /// Registers a service as its own implementation. + /// + void Register(Type serviceType, Lifetime lifetime = Lifetime.Transient); + + /// + /// Registers a service with an implementation type. + /// + void Register(Type serviceType, Type implementingType, Lifetime lifetime = Lifetime.Transient); + + /// + /// Registers a service with an implementation factory. + /// + void Register(Func factory, Lifetime lifetime = Lifetime.Transient); + + /// + /// Registers a service with an implementing instance. + /// + void RegisterInstance(Type serviceType, object instance); + + /// + /// Registers a base type for auto-registration. + /// + /// + /// Auto-registration means that anytime the container is asked to create an instance + /// of a type deriving from , it will first register that + /// type automatically. + /// This can be used for instance for views or controllers. Then, one just needs to + /// register a common base class or interface, and the container knows how to create instances. + /// + void RegisterAuto(Type serviceBaseType); + + #region Control + + /// + /// Configures the container for web support. + /// + /// + /// Enables support for MVC, WebAPI, but *not* per-request scope. This is used early in the boot + /// process, where anything "scoped" should not be linked to a web request. + /// + void ConfigureForWeb(); + + /// + /// Enables per-request scope. + /// + /// + /// Ties scopes to web requests. + /// + void EnablePerWebRequestScope(); + + /// + /// Creates the factory. + /// + IFactory CreateFactory(); + + #endregion + } +} diff --git a/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs b/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs index a15bfdfb16..d94643e49a 100644 --- a/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs +++ b/src/Umbraco.Core/Composing/LightInject/LightInjectContainer.cs @@ -1,16 +1,15 @@ using System; using System.Collections.Generic; using System.Reflection; -using System.Linq; using System.Threading; using LightInject; namespace Umbraco.Core.Composing.LightInject { /// - /// Implements with LightInject. + /// Implements DI with LightInject. /// - public class LightInjectContainer : IContainer + public class LightInjectContainer : IRegister, IFactory, IDisposable { private int _disposed; @@ -99,6 +98,9 @@ namespace Umbraco.Core.Composing.LightInject Container.Dispose(); } + /// + public IFactory CreateFactory() => this; + #region Factory /// @@ -246,18 +248,15 @@ namespace Umbraco.Core.Composing.LightInject => Container.BeginScope(); /// - public virtual IContainer ConfigureForWeb() - { - return this; - } + public virtual void ConfigureForWeb() + { } /// - public IContainer EnablePerWebRequestScope() + public void EnablePerWebRequestScope() { if (!(Container.ScopeManagerProvider is MixedLightInjectScopeManagerProvider smp)) throw new Exception("Container.ScopeManagerProvider is not MixedLightInjectScopeManagerProvider."); smp.EnablePerWebRequestScope(); - return this; } private class AssemblyScanner : IAssemblyScanner diff --git a/src/Umbraco.Core/Composing/RegisterExtensions.cs b/src/Umbraco.Core/Composing/RegisterExtensions.cs index fc6aa78f0b..cff51a7f53 100644 --- a/src/Umbraco.Core/Composing/RegisterExtensions.cs +++ b/src/Umbraco.Core/Composing/RegisterExtensions.cs @@ -1,171 +1,92 @@ using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; using Umbraco.Core.IO; namespace Umbraco.Core.Composing { /// - /// Provides extension methods to the class. + /// Provides extension methods to the class. /// public static class RegisterExtensions { - /// - /// Gets an instance of a service. - /// - /// The type of the service. - /// 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 IFactory container) - => (T) container.GetInstance(typeof(T)); - - /// - /// Tries to get an instance of a service. - /// - /// The type of the service. - /// 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 IFactory container) - => (T) container.TryGetInstance(typeof(T)); - - /// - /// Creates 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 CreateInstance(this IFactory container, params object[] args) - => (T) container.CreateInstance(typeof(T), args); - /// /// Registers a service with an implementation type. /// - public static void Register(this IRegister container, Lifetime lifetime = Lifetime.Transient) - => container.Register(typeof(TService), typeof(TImplementing), lifetime); + public static void Register(this IRegister register, Lifetime lifetime = Lifetime.Transient) + => register.Register(typeof(TService), typeof(TImplementing), lifetime); /// /// Registers a service as its own implementation. /// - public static void Register(this IRegister container, Lifetime lifetime = Lifetime.Transient) - => container.Register(typeof(TService), lifetime); + public static void Register(this IRegister register, Lifetime lifetime = Lifetime.Transient) + => register.Register(typeof(TService), lifetime); /// /// Registers a singleton service as its own implementation. /// - public static void RegisterSingleton(this IRegister container) - => container.Register(typeof(TService), Lifetime.Singleton); + public static void RegisterSingleton(this IRegister register) + => register.Register(typeof(TService), Lifetime.Singleton); /// /// Registers a singleton service with an implementation type. /// - public static void RegisterSingleton(this IRegister container) - => container.Register(typeof(TService), typeof(TImplementing), Lifetime.Singleton); + public static void RegisterSingleton(this IRegister register) + => register.Register(typeof(TService), typeof(TImplementing), Lifetime.Singleton); /// /// Registers a singleton service with an implementation factory. /// - public static void RegisterSingleton(this IRegister container, Func factory) - => container.Register(factory, Lifetime.Singleton); + public static void RegisterSingleton(this IRegister register, Func factory) + => register.Register(factory, Lifetime.Singleton); /// /// Registers a service with an implementing instance. /// - public static void RegisterInstance(this IRegister container, TService instance) - => container.RegisterInstance(typeof(TService), instance); + public static void RegisterInstance(this IRegister register, TService instance) + => register.RegisterInstance(typeof(TService), instance); /// /// Registers a base type for auto-registration. /// - public static void RegisterAuto(this IRegister container) - => container.RegisterAuto(typeof(TServiceBase)); - - /// - /// Creates an instance of a service, with arguments. - /// - /// - /// The type of the instance. - /// Named arguments. - /// An instance of the specified type. - /// - /// The instance type does not need to be registered into the container. - /// The arguments are used as dependencies by the container. Other dependencies - /// are retrieved from the container. - /// - public static object CreateInstance(this IFactory container, Type type, params object[] args) - { - // LightInject has this, but then it requires RegisterConstructorDependency etc and has various oddities - // including the most annoying one, which is that it does not work on singletons (hard to fix) - //return Container.GetInstance(type, args); - - // this method is essentially used to build singleton instances, so it is assumed that it would be - // more expensive to build and cache a dynamic method ctor than to simply invoke the ctor, as we do - // here - this can be discussed - - // TODO: we currently try the ctor with most parameters, but we could want to fall back to others - - var ctor = type.GetConstructors(BindingFlags.Instance | BindingFlags.Public).OrderByDescending(x => x.GetParameters().Length).FirstOrDefault(); - if (ctor == null) throw new InvalidOperationException($"Could not find a public constructor for type {type.FullName}."); - - var ctorParameters = ctor.GetParameters(); - var ctorArgs = new object[ctorParameters.Length]; - var i = 0; - foreach (var parameter in ctorParameters) - { - // no! IsInstanceOfType is not ok here - // ReSharper disable once UseMethodIsInstanceOfType - var arg = args?.FirstOrDefault(a => parameter.ParameterType.IsAssignableFrom(a.GetType())); - ctorArgs[i++] = arg ?? container.GetInstance(parameter.ParameterType); - } - return ctor.Invoke(ctorArgs); - } + public static void RegisterAuto(this IRegister register) + => register.RegisterAuto(typeof(TServiceBase)); /// /// Registers a filesystem. /// /// The type of the filesystem. /// The implementing type. - /// The container. + /// The register. /// A factory method creating the supporting filesystem. - /// The container. - public static IRegister RegisterFileSystem(this IRegister container, Func supportingFileSystemFactory) + /// The register. + public static IRegister RegisterFileSystem(this IRegister register, Func supportingFileSystemFactory) where TImplementing : FileSystemWrapper, TFileSystem { - container.RegisterSingleton(factory => + register.RegisterSingleton(factory => { var fileSystems = factory.GetInstance(); return fileSystems.GetFileSystem(supportingFileSystemFactory(factory)); }); - return container; + return register; } /// /// Registers a filesystem. /// /// The type of the filesystem. - /// The container. + /// The register. /// A factory method creating the supporting filesystem. - /// The container. - public static IRegister RegisterFileSystem(this IRegister container, Func supportingFileSystemFactory) + /// The register. + public static IRegister RegisterFileSystem(this IRegister register, Func supportingFileSystemFactory) where TFileSystem : FileSystemWrapper { - container.RegisterSingleton(factory => + register.RegisterSingleton(factory => { var fileSystems = factory.GetInstance(); return fileSystems.GetFileSystem(supportingFileSystemFactory(factory)); }); - return container; + return register; } } } diff --git a/src/Umbraco.Core/Composing/ContainerFactory.cs b/src/Umbraco.Core/Composing/RegisterFactory.cs similarity index 90% rename from src/Umbraco.Core/Composing/ContainerFactory.cs rename to src/Umbraco.Core/Composing/RegisterFactory.cs index fb2c5f6eb7..bb132c247a 100644 --- a/src/Umbraco.Core/Composing/ContainerFactory.cs +++ b/src/Umbraco.Core/Composing/RegisterFactory.cs @@ -7,7 +7,7 @@ namespace Umbraco.Core.Composing /// /// Creates the container. /// - public static class ContainerFactory + public static class RegisterFactory { // cannot use typeof().AssemblyQualifiedName on the web container - we don't reference it // a normal Umbraco site should run on the web container, but an app may run on the core one @@ -19,12 +19,14 @@ namespace Umbraco.Core.Composing /// /// /// To override the default LightInjectContainer, add an appSetting named umbracoContainerType with - /// a fully qualified type name to a class with a static method "Create" returning an IContainer. + /// a fully qualified type name to a class with a static method "Create" returning an IRegister. /// - public static IContainer Create() + public static IRegister Create() { Type type; + // fixme naming / container? + var configuredTypeName = ConfigurationManager.AppSettings["umbracoContainerType"]; if (configuredTypeName.IsNullOrWhiteSpace()) { @@ -46,9 +48,9 @@ namespace Umbraco.Core.Composing if (factoryMethod == null) throw new Exception($"Container factory class '{configuredTypeName}' does not have a public static method named Create."); - var container = factoryMethod.Invoke(null, Array.Empty()) as IContainer; + var container = factoryMethod.Invoke(null, Array.Empty()) as IRegister; if (container == null) - throw new Exception($"Container factory '{configuredTypeName}' did not return an IContainer implementation."); + throw new Exception($"Container factory '{configuredTypeName}' did not return an IRegister implementation."); return container; } diff --git a/src/Umbraco.Core/IRuntime.cs b/src/Umbraco.Core/IRuntime.cs index 12a189b781..8a62e76a5e 100644 --- a/src/Umbraco.Core/IRuntime.cs +++ b/src/Umbraco.Core/IRuntime.cs @@ -10,8 +10,8 @@ namespace Umbraco.Core /// /// Boots the runtime. /// - /// The application container. - void Boot(IContainer container); + /// The application register. + void Boot(IRegister register); /// /// Gets the runtime state. diff --git a/src/Umbraco.Core/Runtime/CoreRuntime.cs b/src/Umbraco.Core/Runtime/CoreRuntime.cs index 4793b1994b..9ccb45cf0f 100644 --- a/src/Umbraco.Core/Runtime/CoreRuntime.cs +++ b/src/Umbraco.Core/Runtime/CoreRuntime.cs @@ -27,8 +27,8 @@ namespace Umbraco.Core.Runtime public class CoreRuntime : IRuntime { private Components.Components _components; + private IFactory _factory; private RuntimeState _state; - private IContainer _container; /// /// Gets the logger. @@ -44,22 +44,19 @@ namespace Umbraco.Core.Runtime public IRuntimeState State => _state; /// - public virtual void Boot(IContainer container) + public virtual void Boot(IRegister register) { - // assign current container - Current.Factory = _container = container; - // create and register the essential services // ie the bare minimum required to boot // loggers var logger = GetLogger(); - container.RegisterInstance(logger); + register.RegisterInstance(logger); Logger = logger; var profiler = GetProfiler(); - container.RegisterInstance(profiler); + register.RegisterInstance(profiler); var profilingLogger = new ProfilingLogger(logger, profiler); - container.RegisterInstance(profilingLogger); + register.RegisterInstance(profilingLogger); ProfilingLogger = profilingLogger; // application environment @@ -69,32 +66,34 @@ namespace Umbraco.Core.Runtime // application caches var appCaches = GetAppCaches(); - container.RegisterInstance(appCaches); + register.RegisterInstance(appCaches); var runtimeCache = appCaches.RuntimeCache; - container.RegisterInstance(runtimeCache); + register.RegisterInstance(runtimeCache); // database factory var databaseFactory = GetDatabaseFactory(); - container.RegisterInstance(databaseFactory); - container.RegisterSingleton(factory => databaseFactory.SqlContext); + register.RegisterInstance(databaseFactory); + register.RegisterSingleton(_ => databaseFactory.SqlContext); // type loader var globalSettings = UmbracoConfig.For.GlobalSettings(); var typeLoader = new TypeLoader(runtimeCache, globalSettings, profilingLogger); - container.RegisterInstance(typeLoader); + register.RegisterInstance(typeLoader); // runtime state + // beware! must use '() => _factory.GetInstance()' and NOT '_factory.GetInstance' + // as the second one captures the current value (null) and therefore fails _state = new RuntimeState(logger, UmbracoConfig.For.UmbracoSettings(), UmbracoConfig.For.GlobalSettings(), - new Lazy(container.GetInstance), - new Lazy(container.GetInstance)) + new Lazy(() => _factory.GetInstance()), + new Lazy(() => _factory.GetInstance())) { Level = RuntimeLevel.Boot }; - container.RegisterInstance(_state); + register.RegisterInstance(_state); // create the composition - var composition = new Composition(container, typeLoader, profilingLogger, RuntimeLevel.Boot); + var composition = new Composition(register, typeLoader, profilingLogger, RuntimeLevel.Boot); // register runtime-level services Compose(composition); @@ -121,7 +120,7 @@ namespace Umbraco.Core.Runtime logger.Debug("Runtime: {Runtime}", GetType().FullName); var mainDom = AquireMainDom(); - container.RegisterInstance(mainDom); + register.RegisterInstance(mainDom); DetermineRuntimeLevel(databaseFactory); @@ -130,13 +129,9 @@ namespace Umbraco.Core.Runtime _components.Compose(); - // fixme split Container into Register and Factory - // we should have a Current.Factory not a Current.Container - // we should compile the register into a factory *now* - // using the factory before this point should just throw - IFactory factory = container; + _factory = Current.Factory = register.CreateFactory(); - _components.Initialize(factory); + _components.Initialize(_factory); } catch (Exception e) { @@ -422,7 +417,7 @@ namespace Umbraco.Core.Runtime /// /// This is strictly internal, for tests only. protected internal virtual IUmbracoDatabaseFactory GetDatabaseFactory() - => new UmbracoDatabaseFactory(Logger, new Lazy(_container.GetInstance)); + => new UmbracoDatabaseFactory(Logger, new Lazy(() => _factory.GetInstance())); #endregion } diff --git a/src/Umbraco.Core/RuntimeState.cs b/src/Umbraco.Core/RuntimeState.cs index 4ba75ed89f..e98c67caeb 100644 --- a/src/Umbraco.Core/RuntimeState.cs +++ b/src/Umbraco.Core/RuntimeState.cs @@ -20,16 +20,13 @@ namespace Umbraco.Core private readonly IUmbracoSettingsSection _settings; private readonly IGlobalSettings _globalSettings; private readonly HashSet _applicationUrls = new HashSet(); + private readonly Lazy _mainDom; + private readonly Lazy _serverRegistrar; private RuntimeLevel _level; - private Lazy _mainDom; - private Lazy _serverRegistrar; /// /// Initializes a new instance of the class. /// - /// A logger. - /// Umbraco settings. - /// Global settings. public RuntimeState(ILogger logger, IUmbracoSettingsSection settings, IGlobalSettings globalSettings, Lazy mainDom, Lazy serverRegistrar) { diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 3dfde3b175..bc092271b7 100755 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -177,13 +177,15 @@ - + + - + + diff --git a/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs b/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs index 2c68b1608a..5c2681e184 100644 --- a/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs +++ b/src/Umbraco.Tests/Cache/DistributedCache/DistributedCacheTests.cs @@ -24,12 +24,12 @@ namespace Umbraco.Tests.Cache.DistributedCache [SetUp] public void Setup() { - var container = ContainerFactory.Create(); - Current.Factory = container; - var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); + var register = RegisterFactory.Create(); + Current.Factory = register.CreateFactory(); // fixme only for LightInject + var composition = new Composition(register, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); - container.Register(_ => new TestServerRegistrar()); - container.RegisterSingleton(_ => new TestServerMessenger()); + register.Register(_ => new TestServerRegistrar()); + register.RegisterSingleton(_ => new TestServerMessenger()); composition.GetCollectionBuilder() .Add(); diff --git a/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs b/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs index 6047b5bb9a..f30c9a36e3 100644 --- a/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs +++ b/src/Umbraco.Tests/Composing/CollectionBuildersTests.cs @@ -5,9 +5,7 @@ using Moq; using NUnit.Framework; using Umbraco.Core.Composing; using Umbraco.Core; -using Umbraco.Core.Cache; using Umbraco.Core.Components; -using Umbraco.Core.Configuration; using Umbraco.Core.Logging; namespace Umbraco.Tests.Composing @@ -15,7 +13,7 @@ namespace Umbraco.Tests.Composing [TestFixture] public class CollectionBuildersTests { - private IContainer _container; + private IRegister _register; private IFactory _factory; private Composition _composition; @@ -24,10 +22,10 @@ namespace Umbraco.Tests.Composing { Current.Reset(); - _container = ContainerFactory.Create(); - _factory = _container; - Current.Factory = _container; - _composition = new Composition(_container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); + _register = RegisterFactory.Create(); + _factory = _register.CreateFactory(); // fixme only works w/LightInject - would require we reorg tests! + Current.Factory = _factory; + _composition = new Composition(_register, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); } [TearDown] @@ -35,8 +33,8 @@ namespace Umbraco.Tests.Composing { Current.Reset(); - _container.Dispose(); - _container = null; + _register.DisposeIfDisposable(); + _register = null; } [Test] @@ -301,10 +299,10 @@ namespace Umbraco.Tests.Composing // but the container manages the scope, so to test the scope // the collection must come from the container - var col1 = _container.GetInstance(); + var col1 = _factory.GetInstance(); AssertCollection(col1, typeof(Resolved1), typeof(Resolved2)); - var col2 = _container.GetInstance(); + var col2 = _factory.GetInstance(); AssertCollection(col2, typeof(Resolved1), typeof(Resolved2)); AssertSameCollection(col1, col2); @@ -321,10 +319,10 @@ namespace Umbraco.Tests.Composing // but the container manages the scope, so to test the scope // the collection must come from the container - var col1 = _container.GetInstance(); + var col1 = _factory.GetInstance(); AssertCollection(col1, typeof(Resolved1), typeof(Resolved2)); - var col2 = _container.GetInstance(); + var col2 = _factory.GetInstance(); AssertCollection(col1, typeof(Resolved1), typeof(Resolved2)); AssertNotSameCollection(col1, col2); @@ -355,10 +353,10 @@ namespace Umbraco.Tests.Composing TestCollection col1A, col1B; - using (_container.BeginScope()) + using (_factory.BeginScope()) { - col1A = _container.GetInstance(); - col1B = _container.GetInstance(); + col1A = _factory.GetInstance(); + col1B = _factory.GetInstance(); } AssertCollection(col1A, typeof(Resolved1), typeof(Resolved2)); @@ -367,9 +365,9 @@ namespace Umbraco.Tests.Composing TestCollection col2; - using (_container.BeginScope()) + using (_factory.BeginScope()) { - col2 = _container.GetInstance(); + col2 = _factory.GetInstance(); } AssertCollection(col2, typeof(Resolved1), typeof(Resolved2)); diff --git a/src/Umbraco.Tests/Composing/ContainerImplementationTests.cs b/src/Umbraco.Tests/Composing/ContainerImplementationTests.cs index 7b0ac4acf9..6e0fdd0912 100644 --- a/src/Umbraco.Tests/Composing/ContainerImplementationTests.cs +++ b/src/Umbraco.Tests/Composing/ContainerImplementationTests.cs @@ -11,45 +11,49 @@ namespace Umbraco.Tests.Composing [TestFixture] public class ContainerImplementationTests // FIXME merge into ContainerTests or ContainerConformingTests { - private IContainer CreateContainer() => ContainerFactory.Create(); + private IRegister CreateRegister() => RegisterFactory.Create(); [Test] public void CanRegisterSingletonInterface() { - var container = CreateContainer(); - container.RegisterSingleton(); - var s1 = container.GetInstance(); - var s2 = container.GetInstance(); + var register = CreateRegister(); + register.RegisterSingleton(); + var factory = register.CreateFactory(); + var s1 = factory.GetInstance(); + var s2 = factory.GetInstance(); Assert.AreSame(s1, s2); } [Test] public void CanRegisterSingletonClass() { - var container = CreateContainer(); - container.RegisterSingleton(); - var s1 = container.GetInstance(); - var s2 = container.GetInstance(); + var register = CreateRegister(); + register.RegisterSingleton(); + var factory = register.CreateFactory(); + var s1 = factory.GetInstance(); + var s2 = factory.GetInstance(); Assert.AreSame(s1, s2); } [Test] public void CanReRegisterSingletonInterface() { - var container = CreateContainer(); - container.RegisterSingleton(); - container.RegisterSingleton(); - var s = container.GetInstance(); + var register = CreateRegister(); + register.RegisterSingleton(); + register.RegisterSingleton(); + var factory = register.CreateFactory(); + var s = factory.GetInstance(); Assert.IsInstanceOf(s); } [Test] public void CanRegisterSingletonWithCreate() { - var container = CreateContainer(); - container.RegisterSingleton(c => c.CreateInstance(new TestClass1())); - var s1 = container.GetInstance(); - var s2 = container.GetInstance(); + var register = CreateRegister(); + register.RegisterSingleton(c => c.CreateInstance(new TestClass1())); + var factory = register.CreateFactory(); + var s1 = factory.GetInstance(); + var s2 = factory.GetInstance(); Assert.AreSame(s1, s2); } diff --git a/src/Umbraco.Tests/Composing/ContainerTests.cs b/src/Umbraco.Tests/Composing/ContainerTests.cs index 62080ef626..b5be97ce38 100644 --- a/src/Umbraco.Tests/Composing/ContainerTests.cs +++ b/src/Umbraco.Tests/Composing/ContainerTests.cs @@ -12,16 +12,18 @@ namespace Umbraco.Tests.Composing { // tests that a container conforms - private IContainer GetContainer() => LightInjectContainer.Create(); + private IRegister GetRegister() => LightInjectContainer.Create(); [Test] public void CanRegisterAndGet() { - var container = GetContainer(); + var register = GetRegister(); - container.Register(); + register.Register(); - var thing = container.GetInstance(); + var factory = register.CreateFactory(); + + var thing = factory.GetInstance(); Assert.IsNotNull(thing); Assert.IsInstanceOf(thing); } @@ -29,11 +31,13 @@ namespace Umbraco.Tests.Composing [Test] public void CanRegisterAndGetLazy() { - var container = GetContainer(); + var register = GetRegister(); - container.Register(); + register.Register(); - var lazyThing = container.GetInstance>(); + var factory = register.CreateFactory(); + + var lazyThing = factory.GetInstance>(); Assert.IsNotNull(lazyThing); Assert.IsInstanceOf>(lazyThing); var thing = lazyThing.Value; @@ -44,31 +48,37 @@ namespace Umbraco.Tests.Composing [Test] public void CannotRegistedAndGetBase() { - var container = GetContainer(); + var register = GetRegister(); - container.Register(); + register.Register(); - Assert.IsNull(container.TryGetInstance()); + var factory = register.CreateFactory(); + + Assert.IsNull(factory.TryGetInstance()); } [Test] public void CannotRegisterAndGetInterface() { - var container = GetContainer(); + var register = GetRegister(); - container.Register(); + register.Register(); - Assert.IsNull(container.TryGetInstance()); + var factory = register.CreateFactory(); + + Assert.IsNull(factory.TryGetInstance()); } [Test] public void CanRegisterAndGetAllBase() { - var container = GetContainer(); + var register = GetRegister(); - container.Register(); + register.Register(); - var things = container.GetAllInstances(); + var factory = register.CreateFactory(); + + var things = factory.GetAllInstances(); Assert.AreEqual(1, things.Count()); // lightInject: would be zero with option EnableVariance set to false @@ -77,11 +87,13 @@ namespace Umbraco.Tests.Composing [Test] public void CanRegisterAndGetAllInterface() { - var container = GetContainer(); + var register = GetRegister(); - container.Register(); + register.Register(); - var things = container.GetAllInstances(); + var factory = register.CreateFactory(); + + var things = factory.GetAllInstances(); Assert.AreEqual(1, things.Count()); // lightInject: would be zero with option EnableVariance set to false @@ -90,11 +102,13 @@ namespace Umbraco.Tests.Composing [Test] public void CanRegisterBaseAndGet() { - var container = GetContainer(); + var register = GetRegister(); - container.Register(); + register.Register(); - var thing = container.GetInstance(); + var factory = register.CreateFactory(); + + var thing = factory.GetInstance(); Assert.IsNotNull(thing); Assert.IsInstanceOf(thing); } @@ -102,11 +116,13 @@ namespace Umbraco.Tests.Composing [Test] public void CanRegisterInterfaceAndGet() { - var container = GetContainer(); + var register = GetRegister(); - container.Register(); + register.Register(); - var thing = container.GetInstance(); + var factory = register.CreateFactory(); + + var thing = factory.GetInstance(); Assert.IsNotNull(thing); Assert.IsInstanceOf(thing); } @@ -114,21 +130,23 @@ namespace Umbraco.Tests.Composing [Test] public void NonSingletonServiceIsNotUnique() { - var container = GetContainer(); + var register = GetRegister(); - container.Register(); - container.Register(); + register.Register(); + register.Register(); - var things = container.GetInstance>(); + var factory = register.CreateFactory(); + + var things = factory.GetInstance>(); Assert.AreEqual(2, things.Count()); - Assert.IsNull(container.TryGetInstance()); + Assert.IsNull(factory.TryGetInstance()); } [Test] public void SingletonServiceIsUnique() { - var container = GetContainer(); + var register = GetRegister(); // for Core services that ppl may want to redefine in components, // it is important to be able to have a unique, singleton implementation, @@ -136,53 +154,61 @@ namespace Umbraco.Tests.Composing // on each container // redefine the service - container.Register(Lifetime.Singleton); - container.Register(Lifetime.Singleton); + register.Register(Lifetime.Singleton); + register.Register(Lifetime.Singleton); - var things = container.GetInstance>(); + var factory = register.CreateFactory(); + + var things = factory.GetInstance>(); Assert.AreEqual(1, things.Count()); - var thing = container.GetInstance(); + var thing = factory.GetInstance(); Assert.IsInstanceOf(thing); } [Test] public void SingletonImplementationIsNotUnique() { - var container = GetContainer(); + var register = GetRegister(); // define two implementations - container.Register(Lifetime.Singleton); - container.Register(Lifetime.Singleton); + register.Register(Lifetime.Singleton); + register.Register(Lifetime.Singleton); - var things = container.GetInstance>(); + var factory = register.CreateFactory(); + + var things = factory.GetInstance>(); Assert.AreEqual(2, things.Count()); - Assert.IsNull(container.TryGetInstance()); + Assert.IsNull(factory.TryGetInstance()); } [Test] public void CanInjectEnumerableOfBase() { - var container = GetContainer(); + var register = GetRegister(); - container.Register(); - container.Register(); - container.Register(); + register.Register(); + register.Register(); + register.Register(); - var needThings = container.GetInstance(); + var factory = register.CreateFactory(); + + var needThings = factory.GetInstance(); Assert.AreEqual(2, needThings.Things.Count()); } [Test] public void CanGetEnumerableOfBase() { - var container = GetContainer(); + var register = GetRegister(); - container.Register(); - container.Register(); + register.Register(); + register.Register(); - var things = container.GetInstance>(); + var factory = register.CreateFactory(); + + var things = factory.GetInstance>(); Assert.AreEqual(2, things. Count()); } diff --git a/src/Umbraco.Tests/Composing/LazyCollectionBuilderTests.cs b/src/Umbraco.Tests/Composing/LazyCollectionBuilderTests.cs index c39b7d6943..b3009ae90f 100644 --- a/src/Umbraco.Tests/Composing/LazyCollectionBuilderTests.cs +++ b/src/Umbraco.Tests/Composing/LazyCollectionBuilderTests.cs @@ -27,11 +27,9 @@ namespace Umbraco.Tests.Composing Current.Reset(); } - private IContainer CreateContainer() + private IRegister CreateRegister() { - var container = ContainerFactory.Create(); - Current.Factory = container; - return container; + return RegisterFactory.Create(); } // note @@ -41,7 +39,7 @@ namespace Umbraco.Tests.Composing [Test] public void LazyCollectionBuilderHandlesTypes() { - var container = CreateContainer(); + var container = CreateRegister(); var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() @@ -50,13 +48,15 @@ namespace Umbraco.Tests.Composing .Add() .Add(); - var values = container.GetInstance(); + var factory = composition.CreateFactory(); + + var values = factory.GetInstance(); Assert.AreEqual(3, values.Count()); Assert.IsTrue(values.Select(x => x.GetType()) .ContainsAll(new[] { typeof(TransientObject1), typeof(TransientObject2), typeof(TransientObject3) })); - var other = container.GetInstance(); + var other = factory.GetInstance(); Assert.AreNotSame(values, other); // transient var o1 = other.FirstOrDefault(x => x is TransientObject1); Assert.IsFalse(values.Contains(o1)); // transient @@ -65,7 +65,7 @@ namespace Umbraco.Tests.Composing [Test] public void LazyCollectionBuilderHandlesProducers() { - var container = CreateContainer(); + var container = CreateRegister(); var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() @@ -73,13 +73,15 @@ namespace Umbraco.Tests.Composing .Add(() => new[] { typeof(TransientObject3), typeof(TransientObject2) }) .Add(() => new[] { typeof(TransientObject1) }); - var values = container.GetInstance(); + var factory = composition.CreateFactory(); + + var values = factory.GetInstance(); Assert.AreEqual(3, values.Count()); Assert.IsTrue(values.Select(x => x.GetType()) .ContainsAll(new[] { typeof(TransientObject1), typeof(TransientObject2), typeof(TransientObject3) })); - var other = container.GetInstance(); + var other = factory.GetInstance(); Assert.AreNotSame(values, other); // transient var o1 = other.FirstOrDefault(x => x is TransientObject1); Assert.IsFalse(values.Contains(o1)); // transient @@ -88,7 +90,7 @@ namespace Umbraco.Tests.Composing [Test] public void LazyCollectionBuilderHandlesTypesAndProducers() { - var container = CreateContainer(); + var container = CreateRegister(); var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() @@ -97,13 +99,15 @@ namespace Umbraco.Tests.Composing .Add() .Add(() => new[] { typeof(TransientObject1) }); - var values = container.GetInstance(); + var factory = composition.CreateFactory(); + + var values = factory.GetInstance(); Assert.AreEqual(3, values.Count()); Assert.IsTrue(values.Select(x => x.GetType()) .ContainsAll(new[] { typeof(TransientObject1), typeof(TransientObject2), typeof(TransientObject3) })); - var other = container.GetInstance(); + var other = factory.GetInstance(); Assert.AreNotSame(values, other); // transient var o1 = other.FirstOrDefault(x => x is TransientObject1); Assert.IsFalse(values.Contains(o1)); // transient @@ -112,7 +116,7 @@ namespace Umbraco.Tests.Composing [Test] public void LazyCollectionBuilderThrowsOnIllegalTypes() { - var container = CreateContainer(); + var container = CreateRegister(); var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() @@ -124,17 +128,19 @@ namespace Umbraco.Tests.Composing // legal so far... .Add(() => new[] { typeof(TransientObject4) }); + var factory = composition.CreateFactory(); + Assert.Throws(() => { // but throws here when trying to register the types - var values = container.GetInstance(); + var values = factory.GetInstance(); }); } [Test] public void LazyCollectionBuilderCanExcludeTypes() { - var container = CreateContainer(); + var container = CreateRegister(); var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() @@ -142,7 +148,9 @@ namespace Umbraco.Tests.Composing .Add(() => new[] { typeof(TransientObject3), typeof(TransientObject2), typeof(TransientObject1) }) .Exclude(); - var values = container.GetInstance(); + var factory = composition.CreateFactory(); + + var values = factory.GetInstance(); Assert.AreEqual(2, values.Count()); Assert.IsFalse(values.Select(x => x.GetType()) @@ -150,7 +158,7 @@ namespace Umbraco.Tests.Composing Assert.IsTrue(values.Select(x => x.GetType()) .ContainsAll(new[] { typeof(TransientObject1), typeof(TransientObject2) })); - var other = container.GetInstance(); + var other = factory.GetInstance(); Assert.AreNotSame(values, other); // transient var o1 = other.FirstOrDefault(x => x is TransientObject1); Assert.IsFalse(values.Contains(o1)); // transient diff --git a/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs b/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs index c130165d69..1b201f3bc5 100644 --- a/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs +++ b/src/Umbraco.Tests/Composing/PackageActionCollectionTests.cs @@ -17,8 +17,8 @@ namespace Umbraco.Tests.Composing [Test] public void PackageActionCollectionBuilderWorks() { - var container = ContainerFactory.Create(); - Current.Factory = container; + var container = RegisterFactory.Create(); + Current.Factory = container.CreateFactory(); // fixme only for LightInject var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() diff --git a/src/Umbraco.Tests/CoreThings/TryConvertToTests.cs b/src/Umbraco.Tests/CoreThings/TryConvertToTests.cs index 2e187d85a5..d997a1bebd 100644 --- a/src/Umbraco.Tests/CoreThings/TryConvertToTests.cs +++ b/src/Umbraco.Tests/CoreThings/TryConvertToTests.cs @@ -18,7 +18,7 @@ namespace Umbraco.Tests.CoreThings var settings = SettingsForTests.GetDefaultUmbracoSettings(); // fixme - base should do it! - Container.RegisterSingleton(_ => new DefaultShortStringHelper(settings)); + Composition.RegisterSingleton(_ => new DefaultShortStringHelper(settings)); } [Test] diff --git a/src/Umbraco.Tests/IO/FileSystemsTests.cs b/src/Umbraco.Tests/IO/FileSystemsTests.cs index cd2d60395f..be1964cd72 100644 --- a/src/Umbraco.Tests/IO/FileSystemsTests.cs +++ b/src/Umbraco.Tests/IO/FileSystemsTests.cs @@ -21,7 +21,8 @@ namespace Umbraco.Tests.IO [TestFixture] public class FileSystemsTests { - private IContainer _container; + private IRegister _register; + private IFactory _factory; [SetUp] public void Setup() @@ -30,17 +31,19 @@ namespace Umbraco.Tests.IO var config = SettingsForTests.GetDefaultUmbracoSettings(); SettingsForTests.ConfigureSettings(config); - _container = ContainerFactory.Create(); - Current.Factory = _container; - var composition = new Composition(_container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); + _register = RegisterFactory.Create(); - _container.Register(_ => Mock.Of()); - _container.Register(_ => Mock.Of()); - _container.Register(_ => Mock.Of()); - _container.RegisterSingleton(); + var composition = new Composition(_register, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); + + composition.Register(_ => Mock.Of()); + composition.Register(_ => Mock.Of()); + composition.Register(_ => Mock.Of()); + composition.RegisterSingleton(); composition.ComposeFileSystems(); + _factory = composition.CreateFactory(); + // make sure we start clean // because some tests will create corrupt or weird filesystems FileSystems.Reset(); @@ -53,37 +56,37 @@ namespace Umbraco.Tests.IO FileSystems.Reset(); Current.Reset(); - _container.Dispose(); + _register.DisposeIfDisposable(); } - private FileSystems FileSystems => _container.GetInstance(); + private FileSystems FileSystems => _factory.GetInstance(); [Test] public void Can_Get_MediaFileSystem() { - var fileSystem = _container.GetInstance(); + var fileSystem = _factory.GetInstance(); Assert.NotNull(fileSystem); } [Test] public void Can_Get_IMediaFileSystem() { - var fileSystem = _container.GetInstance(); + var fileSystem = _factory.GetInstance(); Assert.NotNull(fileSystem); } [Test] public void IMediaFileSystem_Is_Singleton() { - var fileSystem1 = _container.GetInstance(); - var fileSystem2 = _container.GetInstance(); + var fileSystem1 = _factory.GetInstance(); + var fileSystem2 = _factory.GetInstance(); Assert.AreSame(fileSystem1, fileSystem2); } [Test] public void Can_Delete_MediaFiles() { - var fs = _container.GetInstance(); + var fs = _factory.GetInstance(); var ms = new MemoryStream(Encoding.UTF8.GetBytes("test")); var virtPath = fs.GetMediaPath("file.txt", Guid.NewGuid(), Guid.NewGuid()); fs.AddFile(virtPath, ms); diff --git a/src/Umbraco.Tests/Integration/ContentEventsTests.cs b/src/Umbraco.Tests/Integration/ContentEventsTests.cs index 30dfabbbdc..df7bdb5ccf 100644 --- a/src/Umbraco.Tests/Integration/ContentEventsTests.cs +++ b/src/Umbraco.Tests/Integration/ContentEventsTests.cs @@ -49,8 +49,8 @@ namespace Umbraco.Tests.Integration { base.Compose(); - Container.Register(_ => new TestServerRegistrar()); // localhost-only - Container.RegisterSingleton(); + Composition.Register(_ => new TestServerRegistrar()); // localhost-only + Composition.RegisterSingleton(); Composition.GetCollectionBuilder() .Add() diff --git a/src/Umbraco.Tests/Issues/U9560.cs b/src/Umbraco.Tests/Issues/U9560.cs index 830a1fb84d..e422cbc86b 100644 --- a/src/Umbraco.Tests/Issues/U9560.cs +++ b/src/Umbraco.Tests/Issues/U9560.cs @@ -27,7 +27,7 @@ namespace Umbraco.Tests.Issues var aliasName = string.Empty; // read fields, same as what we do with PetaPoco Fetch - using (var db = Container.GetInstance().CreateDatabase()) + using (var db = Factory.GetInstance().CreateDatabase()) { db.OpenSharedConnection(); try @@ -55,7 +55,7 @@ namespace Umbraco.Tests.Issues Assert.AreEqual("Alias", aliasName); // try differently - using (var db = Container.GetInstance().CreateDatabase()) + using (var db = Factory.GetInstance().CreateDatabase()) { db.OpenSharedConnection(); try diff --git a/src/Umbraco.Tests/Manifest/ManifestParserTests.cs b/src/Umbraco.Tests/Manifest/ManifestParserTests.cs index 948171b0cb..a0cdb2b1bf 100644 --- a/src/Umbraco.Tests/Manifest/ManifestParserTests.cs +++ b/src/Umbraco.Tests/Manifest/ManifestParserTests.cs @@ -12,7 +12,6 @@ using Umbraco.Core.Manifest; using Umbraco.Core.PropertyEditors; using Umbraco.Core.PropertyEditors.Validators; using Umbraco.Core.Services; -using Umbraco.Web.ContentApps; namespace Umbraco.Tests.Manifest { @@ -25,13 +24,13 @@ namespace Umbraco.Tests.Manifest public void Setup() { Current.Reset(); - var container = Mock.Of(); - Current.Factory = container; + var factory = Mock.Of(); + Current.Factory = factory; var serviceContext = new ServiceContext( localizedTextService: Mock.Of()); - Mock.Get(container) + Mock.Get(factory) .Setup(x => x.GetInstance(It.IsAny())) .Returns(x => { diff --git a/src/Umbraco.Tests/Models/ContentTests.cs b/src/Umbraco.Tests/Models/ContentTests.cs index 37f2d4e62d..d30295c662 100644 --- a/src/Umbraco.Tests/Models/ContentTests.cs +++ b/src/Umbraco.Tests/Models/ContentTests.cs @@ -41,11 +41,11 @@ namespace Umbraco.Tests.Models { base.Compose(); - Container.Register(_ => Mock.Of()); + Composition.Register(_ => Mock.Of()); Composition.ComposeFileSystems(); - Container.Register(_ => Mock.Of()); - Container.Register(_ => Mock.Of()); + Composition.Register(_ => Mock.Of()); + Composition.Register(_ => Mock.Of()); } [Test] diff --git a/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs b/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs index 87698db400..4d813b5059 100644 --- a/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs +++ b/src/Umbraco.Tests/Models/Mapping/AutoMapperTests.cs @@ -24,11 +24,11 @@ namespace Umbraco.Tests.Models.Mapping var manifestBuilder = new ManifestParser( CacheHelper.Disabled.RuntimeCache, new ManifestValueValidatorCollection(Enumerable.Empty()), - Logger) + Composition.Logger) { Path = TestHelper.CurrentAssemblyDirectory }; - Container.Register(_ => manifestBuilder); + Composition.Register(_ => manifestBuilder); Func> typeListProducerList = Enumerable.Empty; Composition.GetCollectionBuilder() @@ -39,7 +39,7 @@ namespace Umbraco.Tests.Models.Mapping [Test] public void AssertConfigurationIsValid() { - var profiles = Container.GetAllInstances().ToArray(); + var profiles = Factory.GetAllInstances().ToArray(); var config = new MapperConfiguration(cfg => { diff --git a/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs b/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs index 0d5c9548fd..d272dc9453 100644 --- a/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs +++ b/src/Umbraco.Tests/Models/Mapping/ContentTypeModelMappingTests.cs @@ -55,13 +55,13 @@ namespace Umbraco.Tests.Models.Mapping var dataEditors = new DataEditorCollection(editors); _editorsMock = new Mock(dataEditors); _editorsMock.Setup(x => x[It.IsAny()]).Returns(editors[0]); - Container.RegisterSingleton(f => _editorsMock.Object); + Composition.RegisterSingleton(f => _editorsMock.Object); - Container.RegisterSingleton(_ => _contentTypeService.Object); - Container.RegisterSingleton(_ => _contentService.Object); - Container.RegisterSingleton(_ => _dataTypeService.Object); - Container.RegisterSingleton(_ => _entityService.Object); - Container.RegisterSingleton(_ => _fileService.Object); + Composition.RegisterSingleton(_ => _contentTypeService.Object); + Composition.RegisterSingleton(_ => _contentService.Object); + Composition.RegisterSingleton(_ => _dataTypeService.Object); + Composition.RegisterSingleton(_ => _entityService.Object); + Composition.RegisterSingleton(_ => _fileService.Object); } [Test] diff --git a/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs b/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs index 03a59584a3..df375aca13 100644 --- a/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs +++ b/src/Umbraco.Tests/Models/Mapping/ContentWebModelMappingTests.cs @@ -26,7 +26,7 @@ namespace Umbraco.Tests.Models.Mapping { base.Compose(); - Container.RegisterSingleton(f => Mock.Of()); + Composition.RegisterSingleton(f => Mock.Of()); } [DataEditor("Test.Test", "Test", "~/Test.html")] diff --git a/src/Umbraco.Tests/Models/VariationTests.cs b/src/Umbraco.Tests/Models/VariationTests.cs index c7bc269e61..3fdd3ee0db 100644 --- a/src/Umbraco.Tests/Models/VariationTests.cs +++ b/src/Umbraco.Tests/Models/VariationTests.cs @@ -26,8 +26,8 @@ namespace Umbraco.Tests.Models // need to be able to retrieve them all... Current.Reset(); - var container = Mock.Of(); - Current.Factory = container; + var factory = Mock.Of(); + Current.Factory = factory; var dataEditors = new DataEditorCollection(new IDataEditor[] { @@ -49,7 +49,7 @@ namespace Umbraco.Tests.Models dataTypeService: dataTypeService, localizedTextService: Mock.Of()); - Mock.Get(container) + Mock.Get(factory) .Setup(x => x.GetInstance(It.IsAny())) .Returns(x => { diff --git a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs index f9b8281285..ce871d0d0a 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DataTypeDefinitionRepositoryTest.cs @@ -20,7 +20,7 @@ namespace Umbraco.Tests.Persistence.Repositories { private IDataTypeRepository CreateRepository() { - return Container.GetInstance(); + return Factory.GetInstance(); } private EntityContainerRepository CreateContainerRepository(IScopeAccessor scopeAccessor) diff --git a/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs index bd66b83677..155ea1905c 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/DictionaryRepositoryTest.cs @@ -24,7 +24,7 @@ namespace Umbraco.Tests.Persistence.Repositories private IDictionaryRepository CreateRepository() { - return Container.GetInstance(); + return Factory.GetInstance(); } [Test] @@ -230,7 +230,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var languageRepository = Container.GetInstance(); + var languageRepository = Factory.GetInstance(); var repository = CreateRepository(); var language = languageRepository.Get(1); diff --git a/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs b/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs index da9e49876b..8109ffbf56 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/PartialViewRepositoryTests.cs @@ -29,7 +29,7 @@ namespace Umbraco.Tests.Persistence.Repositories { base.Compose(); - Container.RegisterSingleton(f => new DataEditorCollection(Enumerable.Empty())); + Composition.RegisterSingleton(f => new DataEditorCollection(Enumerable.Empty())); } [Test] diff --git a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs index 98bccaa313..4a07b3780c 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ScriptRepositoryTest.cs @@ -39,7 +39,7 @@ namespace Umbraco.Tests.Persistence.Repositories { base.Compose(); - Container.RegisterSingleton(f => new DataEditorCollection(Enumerable.Empty())); + Composition.RegisterSingleton(f => new DataEditorCollection(Enumerable.Empty())); } [Test] diff --git a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs index 24aa1aaa55..8693f65d4d 100644 --- a/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs +++ b/src/Umbraco.Tests/PropertyEditors/ImageCropperTest.cs @@ -69,12 +69,13 @@ namespace Umbraco.Tests.PropertyEditors { try { - var container = ContainerFactory.Create(); - Current.Factory = container; + var container = RegisterFactory.Create(); var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder(); + Current.Factory = container.CreateFactory(); + var logger = Mock.Of(); var scheme = Mock.Of(); var config = Mock.Of(); diff --git a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs b/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs index 17ca52ca61..2d2f1e8be7 100644 --- a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs +++ b/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueEditorTests.cs @@ -21,11 +21,12 @@ namespace Umbraco.Tests.PropertyEditors //normalize culture Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; - var container = ContainerFactory.Create(); - Current.Factory = container; + var register = RegisterFactory.Create(); - container.Register(_ + register.Register(_ => new DefaultShortStringHelper(new DefaultShortStringHelperConfig().WithDefault(SettingsForTests.GetDefaultUmbracoSettings()))); + + Current.Factory = register.CreateFactory(); } [TearDown] diff --git a/src/Umbraco.Tests/Published/ConvertersTests.cs b/src/Umbraco.Tests/Published/ConvertersTests.cs index 2a0aea1e8e..026aee4bb1 100644 --- a/src/Umbraco.Tests/Published/ConvertersTests.cs +++ b/src/Umbraco.Tests/Published/ConvertersTests.cs @@ -174,9 +174,9 @@ namespace Umbraco.Tests.Published public void SimpleConverter3Test() { Current.Reset(); - var container = ContainerFactory.Create(); - Current.Factory = container; - var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); + var register = RegisterFactory.Create(); + + var composition = new Composition(register, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); composition.GetCollectionBuilder() .Append() @@ -187,7 +187,9 @@ namespace Umbraco.Tests.Published typeof (PublishedSnapshotTestObjects.TestElementModel1), typeof (PublishedSnapshotTestObjects.TestElementModel2), typeof (PublishedSnapshotTestObjects.TestContentModel1), typeof (PublishedSnapshotTestObjects.TestContentModel2), }); - container.Register(f => factory); + register.Register(f => factory); + + Current.Factory = register.CreateFactory(); var cacheMock = new Mock(); var cacheContent = new Dictionary(); @@ -196,7 +198,7 @@ namespace Umbraco.Tests.Published publishedSnapshotMock.Setup(x => x.Content).Returns(cacheMock.Object); var publishedSnapshotAccessorMock = new Mock(); publishedSnapshotAccessorMock.Setup(x => x.PublishedSnapshot).Returns(publishedSnapshotMock.Object); - container.Register(f => publishedSnapshotAccessorMock.Object); + register.Register(f => publishedSnapshotAccessorMock.Object); var converters = Current.Factory.GetInstance(); diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs index 4b431d18e6..1d9247810f 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs @@ -23,12 +23,12 @@ namespace Umbraco.Tests.PublishedContent { base.Compose(); - Container.RegisterSingleton(_ => GetServiceContext()); + Composition.RegisterSingleton(_ => GetServiceContext()); } protected ServiceContext GetServiceContext() { - var serviceContext = TestObjects.GetServiceContextMock(Container); + var serviceContext = TestObjects.GetServiceContextMock(Factory); MockLocalizationService(serviceContext); return serviceContext; } diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentSnapshotTestBase.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentSnapshotTestBase.cs index c4f4d5304f..70faf18bf4 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentSnapshotTestBase.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentSnapshotTestBase.cs @@ -39,7 +39,7 @@ namespace Umbraco.Tests.PublishedContent { base.Compose(); - Container.RegisterSingleton(f => new PublishedModelFactory(f.GetInstance().GetTypes())); + Composition.RegisterSingleton(f => new PublishedModelFactory(f.GetInstance().GetTypes())); } protected override TypeLoader CreateTypeLoader(IRuntimeCacheProvider runtimeCache, IGlobalSettings globalSettings, IProfilingLogger logger) diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentTestBase.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentTestBase.cs index 80fb02ec0f..1c66f5a6d3 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentTestBase.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentTestBase.cs @@ -34,7 +34,7 @@ namespace Umbraco.Tests.PublishedContent { base.Initialize(); - var converters = Container.GetInstance(); + var converters = Factory.GetInstance(); var dataTypeService = new TestObjects.TestDataTypeService( new DataType(new RichTextPropertyEditor(Mock.Of())) { Id = 1 }); diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs index 9b3ceb21d1..b347f0d676 100644 --- a/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs +++ b/src/Umbraco.Tests/PublishedContent/PublishedContentTests.cs @@ -33,9 +33,9 @@ namespace Umbraco.Tests.PublishedContent { base.Compose(); - Container.RegisterSingleton(f => new PublishedModelFactory(f.GetInstance().GetTypes())); - Container.RegisterSingleton(); - Container.RegisterSingleton(); + Composition.RegisterSingleton(f => new PublishedModelFactory(f.GetInstance().GetTypes())); + Composition.RegisterSingleton(); + Composition.RegisterSingleton(); var logger = Mock.Of(); var dataTypeService = new TestObjects.TestDataTypeService( @@ -45,14 +45,14 @@ namespace Umbraco.Tests.PublishedContent new DataType(new IntegerPropertyEditor(logger)) { Id = 1003 }, new DataType(new TextboxPropertyEditor(logger)) { Id = 1004 }, new DataType(new MediaPickerPropertyEditor(logger)) { Id = 1005 }); - Container.RegisterSingleton(f => dataTypeService); + Composition.RegisterSingleton(f => dataTypeService); } protected override void Initialize() { base.Initialize(); - var factory = Container.GetInstance() as PublishedContentTypeFactory; + var factory = Factory.GetInstance() as PublishedContentTypeFactory; // need to specify a custom callback for unit tests // AutoPublishedContentTypes generates properties automatically @@ -818,7 +818,7 @@ namespace Umbraco.Tests.PublishedContent [Test] public void FragmentProperty() { - var factory = Container.GetInstance() as PublishedContentTypeFactory; + var factory = Factory.GetInstance() as PublishedContentTypeFactory; var pt = factory.CreatePropertyType("detached", 1003); var ct = factory.CreateContentType(0, "alias", new[] { pt }); @@ -837,7 +837,7 @@ namespace Umbraco.Tests.PublishedContent [Test] public void Fragment2() { - var factory = Container.GetInstance() as PublishedContentTypeFactory; + var factory = Factory.GetInstance() as PublishedContentTypeFactory; var pt1 = factory.CreatePropertyType("legend", 1004); var pt2 = factory.CreatePropertyType("image", 1005); diff --git a/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs index 0708287160..72848753e5 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByIdTests.cs @@ -18,7 +18,7 @@ namespace Umbraco.Tests.Routing var umbracoContext = GetUmbracoContext(urlAsString); var publishedRouter = CreatePublishedRouter(); var frequest = publishedRouter.CreateRequest(umbracoContext); - var lookup = new ContentFinderByIdPath(Container.GetInstance().WebRouting, Logger); + var lookup = new ContentFinderByIdPath(Factory.GetInstance().WebRouting, Logger); var result = lookup.TryFindContent(frequest); diff --git a/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs b/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs index 5787d3e613..92aed90168 100644 --- a/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs +++ b/src/Umbraco.Tests/Routing/ContentFinderByUrlWithDomainsTests.cs @@ -129,7 +129,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.ConfigureSettings(globalSettingsMock.Object); var umbracoContext = GetUmbracoContext(url, globalSettings:globalSettingsMock.Object); - var publishedRouter = CreatePublishedRouter(Container); + var publishedRouter = CreatePublishedRouter(Factory); var frequest = publishedRouter.CreateRequest(umbracoContext); // must lookup domain else lookup by url fails @@ -172,7 +172,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.ConfigureSettings(globalSettingsMock.Object); var umbracoContext = GetUmbracoContext(url, globalSettings:globalSettingsMock.Object); - var publishedRouter = CreatePublishedRouter(Container); + var publishedRouter = CreatePublishedRouter(Factory); var frequest = publishedRouter.CreateRequest(umbracoContext); // must lookup domain else lookup by url fails diff --git a/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs b/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs index df18ec0966..471fa27f82 100644 --- a/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs +++ b/src/Umbraco.Tests/Routing/DomainsAndCulturesTests.cs @@ -15,7 +15,7 @@ namespace Umbraco.Tests.Routing { base.Compose(); - Container.Register(); + Composition.Register(); } private void SetDomains1() @@ -270,7 +270,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext(inputUrl, globalSettings:globalSettings.Object); - var publishedRouter = CreatePublishedRouter(Container); + var publishedRouter = CreatePublishedRouter(Factory); var frequest = publishedRouter.CreateRequest(umbracoContext); // lookup domain @@ -320,7 +320,7 @@ namespace Umbraco.Tests.Routing SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext(inputUrl, globalSettings:globalSettings.Object); - var publishedRouter = CreatePublishedRouter(Container); + var publishedRouter = CreatePublishedRouter(Factory); var frequest = publishedRouter.CreateRequest(umbracoContext); // lookup domain @@ -375,7 +375,7 @@ namespace Umbraco.Tests.Routing globalSettings.Setup(x => x.HideTopLevelNodeFromPath).Returns(false); SettingsForTests.ConfigureSettings(globalSettings.Object); var umbracoContext = GetUmbracoContext(inputUrl, globalSettings:globalSettings.Object); - var publishedRouter = CreatePublishedRouter(Container); + var publishedRouter = CreatePublishedRouter(Factory); var frequest = publishedRouter.CreateRequest(umbracoContext); // lookup domain diff --git a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs index 0bb12ebda5..949031cc65 100644 --- a/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs +++ b/src/Umbraco.Tests/Routing/RenderRouteHandlerTests.cs @@ -48,7 +48,7 @@ namespace Umbraco.Tests.Routing : base(umbracoApplication) { } - public override void Boot(IContainer container) + public override void Boot(IRegister container) { // do it before anything else - this is the only place where it's possible var logger = Mock.Of(); @@ -68,13 +68,13 @@ namespace Umbraco.Tests.Routing // set the default RenderMvcController Current.DefaultRenderMvcControllerType = typeof(RenderMvcController); // fixme WRONG! - var surfaceControllerTypes = new SurfaceControllerTypeCollection(Current.TypeLoader.GetSurfaceControllers()); - Container.RegisterInstance(surfaceControllerTypes); + var surfaceControllerTypes = new SurfaceControllerTypeCollection(Composition.TypeLoader.GetSurfaceControllers()); + Composition.RegisterInstance(surfaceControllerTypes); - var umbracoApiControllerTypes = new UmbracoApiControllerTypeCollection(Current.TypeLoader.GetUmbracoApiControllers()); - Container.RegisterInstance(umbracoApiControllerTypes); + var umbracoApiControllerTypes = new UmbracoApiControllerTypeCollection(Composition.TypeLoader.GetUmbracoApiControllers()); + Composition.RegisterInstance(umbracoApiControllerTypes); - Container.RegisterSingleton(_ => new DefaultShortStringHelper(SettingsForTests.GetDefaultUmbracoSettings())); + Composition.RegisterSingleton(_ => new DefaultShortStringHelper(SettingsForTests.GetDefaultUmbracoSettings())); } public override void TearDown() diff --git a/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs b/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs index 7fef0147e7..7dea5bc4e9 100644 --- a/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs +++ b/src/Umbraco.Tests/Routing/UmbracoModuleTests.cs @@ -39,8 +39,8 @@ namespace Umbraco.Tests.Routing ( globalSettings, Mock.Of(), - Container.GetInstance(), - Container.GetInstance(), + Factory.GetInstance(), + Factory.GetInstance(), new UrlProviderCollection(new IUrlProvider[0]), runtime, logger, diff --git a/src/Umbraco.Tests/Routing/UrlProviderTests.cs b/src/Umbraco.Tests/Routing/UrlProviderTests.cs index daac1492e4..6f29a312ae 100644 --- a/src/Umbraco.Tests/Routing/UrlProviderTests.cs +++ b/src/Umbraco.Tests/Routing/UrlProviderTests.cs @@ -25,7 +25,7 @@ namespace Umbraco.Tests.Routing protected override void Compose() { base.Compose(); - Container.Register(); + Composition.Register(); } private IUmbracoSettingsSection _umbracoSettings; diff --git a/src/Umbraco.Tests/Routing/UrlRoutingTestBase.cs b/src/Umbraco.Tests/Routing/UrlRoutingTestBase.cs index 663daf3083..100e814c83 100644 --- a/src/Umbraco.Tests/Routing/UrlRoutingTestBase.cs +++ b/src/Umbraco.Tests/Routing/UrlRoutingTestBase.cs @@ -34,13 +34,13 @@ namespace Umbraco.Tests.Routing { base.Compose(); - Container.RegisterSingleton(_ => GetServiceContext()); + Composition.RegisterSingleton(_ => GetServiceContext()); } protected ServiceContext GetServiceContext() { // get the mocked service context to get the mocked domain service - var serviceContext = TestObjects.GetServiceContextMock(Container); + var serviceContext = TestObjects.GetServiceContextMock(Factory); //setup mock domain service var domainService = Mock.Get(serviceContext.DomainService); diff --git a/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs b/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs index 7ef0f69dda..4ff732db01 100644 --- a/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs +++ b/src/Umbraco.Tests/Routing/UrlsProviderWithDomainsTests.cs @@ -20,8 +20,8 @@ namespace Umbraco.Tests.Routing { base.Compose(); - Container.RegisterSingleton(_ => Mock.Of()); - Container.Register(); + Composition.RegisterSingleton(_ => Mock.Of()); + Composition.Register(); } void SetDomains1() diff --git a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs index dda9005506..e2c55b1003 100644 --- a/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs +++ b/src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs @@ -22,8 +22,8 @@ namespace Umbraco.Tests.Routing protected override void Compose() { base.Compose(); - Container.RegisterSingleton(_ => Mock.Of()); - Container.Register(); + Composition.RegisterSingleton(_ => Mock.Of()); + Composition.Register(); } [Test] diff --git a/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs b/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs index ceac7127f2..092ed54a35 100644 --- a/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs +++ b/src/Umbraco.Tests/Runtimes/CoreRuntimeTests.cs @@ -136,10 +136,10 @@ namespace Umbraco.Tests.Runtimes private MainDom _mainDom; - public override void Boot(IContainer container) + public override void Boot(IRegister container) { base.Boot(container); - _mainDom = container.GetInstance(); + _mainDom = Current.Factory.GetInstance(); } public override void Terminate() diff --git a/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs b/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs index fa1d0482cf..04703e3195 100644 --- a/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopeEventDispatcherTests.cs @@ -32,15 +32,17 @@ namespace Umbraco.Tests.Scoping DoThing2 = null; DoThing3 = null; - var container = ContainerFactory.Create(); - Current.Factory = container; - var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); + var register = RegisterFactory.Create(); - _testObjects = new TestObjects(container); + var composition = new Composition(register, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); - container.RegisterSingleton(factory => new FileSystems(container, factory.TryGetInstance())); + _testObjects = new TestObjects(register); + + register.RegisterSingleton(factory => new FileSystems(factory, factory.TryGetInstance())); composition.GetCollectionBuilder(); + Current.Factory = register.CreateFactory(); + SettingsForTests.Reset(); // ensure we have configuration } diff --git a/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs b/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs index ada58942c3..50d0f42626 100644 --- a/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs @@ -44,8 +44,8 @@ namespace Umbraco.Tests.Scoping // but then, it requires a lot of plumbing ;( // fixme - and we cannot inject a DistributedCache yet // so doing all this mess - Container.RegisterSingleton(); - Container.RegisterSingleton(f => Mock.Of()); + Composition.RegisterSingleton(); + Composition.RegisterSingleton(f => Mock.Of()); Composition.GetCollectionBuilder() .Add(() => Composition.TypeLoader.GetCacheRefreshers()); } @@ -94,7 +94,7 @@ namespace Umbraco.Tests.Scoping documentRepository, mediaRepository, memberRepository, DefaultCultureAccessor, new DatabaseDataSource(), - Container.GetInstance(), new SiteDomainHelper()); + Factory.GetInstance(), new SiteDomainHelper()); } protected UmbracoContext GetUmbracoContextNu(string url, int templateId = 1234, RouteData routeData = null, bool setSingleton = false, IUmbracoSettingsSection umbracoSettings = null, IEnumerable urlProviders = null) diff --git a/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs b/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs index a4040ca019..b00dfbaa03 100644 --- a/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopedRepositoryTests.cs @@ -30,8 +30,8 @@ namespace Umbraco.Tests.Scoping // but then, it requires a lot of plumbing ;( // fixme - and we cannot inject a DistributedCache yet // so doing all this mess - Container.RegisterSingleton(); - Container.RegisterSingleton(f => Mock.Of()); + Composition.RegisterSingleton(); + Composition.RegisterSingleton(f => Mock.Of()); Composition.GetCollectionBuilder() .Add(() => Composition.TypeLoader.GetCacheRefreshers()); } diff --git a/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs b/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs index 9c98dcd538..c829643964 100644 --- a/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs +++ b/src/Umbraco.Tests/Scoping/ScopedXmlTests.cs @@ -32,8 +32,8 @@ namespace Umbraco.Tests.Scoping // but then, it requires a lot of plumbing ;( // fixme - and we cannot inject a DistributedCache yet // so doing all this mess - Container.RegisterSingleton(); - Container.RegisterSingleton(f => Mock.Of()); + Composition.RegisterSingleton(); + Composition.RegisterSingleton(f => Mock.Of()); Composition.GetCollectionBuilder() .Add(() => Composition.TypeLoader.GetCacheRefreshers()); } diff --git a/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs b/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs index ce673bcd47..cc2baafffc 100644 --- a/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs +++ b/src/Umbraco.Tests/Services/ContentServicePerformanceTest.cs @@ -36,7 +36,7 @@ namespace Umbraco.Tests.Services protected override void Compose() { base.Compose(); - Container.Register(); + Composition.Register(); } [Test] diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index 31f0f0308b..9b33b1d30d 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -57,7 +57,7 @@ namespace Umbraco.Tests.Services { base.Compose(); - Container.RegisterSingleton(factory => Mock.Of()); + Composition.RegisterSingleton(factory => Mock.Of()); } /// diff --git a/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs b/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs index 5b3d2f2583..17c31ca409 100644 --- a/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs +++ b/src/Umbraco.Tests/Services/ContentTypeServiceVariantsTests.cs @@ -35,8 +35,8 @@ namespace Umbraco.Tests.Services base.Compose(); // pfew - see note in ScopedNuCacheTests? - Container.RegisterSingleton(); - Container.RegisterSingleton(f => Mock.Of()); + Composition.RegisterSingleton(); + Composition.RegisterSingleton(f => Mock.Of()); Composition.GetCollectionBuilder() .Add(() => Composition.TypeLoader.GetCacheRefreshers()); } @@ -50,7 +50,7 @@ namespace Umbraco.Tests.Services var contentTypeFactory = new PublishedContentTypeFactory(Mock.Of(), new PropertyValueConverterCollection(Array.Empty()), Mock.Of()); //var documentRepository = Mock.Of(); - var documentRepository = Container.GetInstance(); + var documentRepository = Factory.GetInstance(); var mediaRepository = Mock.Of(); var memberRepository = Mock.Of(); @@ -68,7 +68,7 @@ namespace Umbraco.Tests.Services documentRepository, mediaRepository, memberRepository, DefaultCultureAccessor, new DatabaseDataSource(), - Container.GetInstance(), new SiteDomainHelper()); + Factory.GetInstance(), new SiteDomainHelper()); } public class LocalServerMessenger : ServerMessengerBase diff --git a/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs b/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs index 5e8acf03bd..b64b4dbf16 100644 --- a/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs +++ b/src/Umbraco.Tests/Strings/DefaultShortStringHelperTests.cs @@ -69,7 +69,7 @@ namespace Umbraco.Tests.Strings })); // fixme - move to a "compose" thing? - Container.RegisterSingleton(f => _helper); + Composition.RegisterSingleton(f => _helper); } private static readonly Regex FrenchElisionsRegex = new Regex("\\b(c|d|j|l|m|n|qu|s|t)('|\u8217)", RegexOptions.Compiled | RegexOptions.IgnoreCase); diff --git a/src/Umbraco.Tests/Strings/StringExtensionsTests.cs b/src/Umbraco.Tests/Strings/StringExtensionsTests.cs index 81dec809c8..bcb6f0d60d 100644 --- a/src/Umbraco.Tests/Strings/StringExtensionsTests.cs +++ b/src/Umbraco.Tests/Strings/StringExtensionsTests.cs @@ -22,7 +22,7 @@ namespace Umbraco.Tests.Strings base.SetUp(); // fixme - in "compose"? - Container.RegisterSingleton(_ => new MockShortStringHelper()); + Composition.RegisterSingleton(_ => new MockShortStringHelper()); } [Test] diff --git a/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs b/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs index 09ce5fb916..846fcfac5d 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseUsingSqlCeSyntax.cs @@ -34,12 +34,12 @@ namespace Umbraco.Tests.TestHelpers var sqlSyntax = new SqlCeSyntaxProvider(); - var container = ContainerFactory.Create(); - Current.Factory = container; + var container = RegisterFactory.Create(); + var composition = new Composition(container, new TypeLoader(), Mock.Of(), RuntimeLevel.Run); - container.RegisterSingleton(factory => Mock.Of()); - container.RegisterSingleton(factory => Mock.Of()); + container.RegisterSingleton(_ => Mock.Of()); + container.RegisterSingleton(_ => Mock.Of()); var logger = new ProfilingLogger(Mock.Of(), Mock.Of()); var pluginManager = new TypeLoader(NullCacheProvider.Instance, @@ -50,7 +50,10 @@ namespace Umbraco.Tests.TestHelpers composition.GetCollectionBuilder() .Add(() => Current.TypeLoader.GetAssignedMapperTypes()); - Mappers = container.GetInstance(); + + var factory = Current.Factory = container.CreateFactory(); + + Mappers = factory.GetInstance(); var pocoMappers = new NPoco.MapperCollection { new PocoMapper() }; var pocoDataFactory = new FluentPocoDataFactory((type, iPocoDataFactory) => new PocoDataBuilder(type, pocoMappers).Init()); diff --git a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs index b1e9257918..832bbd141d 100644 --- a/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs +++ b/src/Umbraco.Tests/TestHelpers/BaseWebTest.cs @@ -27,8 +27,8 @@ namespace Umbraco.Tests.TestHelpers { base.Compose(); - Container.RegisterSingleton(); - Container.RegisterSingleton(); + Composition.RegisterSingleton(); + Composition.RegisterSingleton(); } protected override void Initialize() diff --git a/src/Umbraco.Tests/TestHelpers/TestObjects.cs b/src/Umbraco.Tests/TestHelpers/TestObjects.cs index 02e77ae1a5..13f85549f1 100644 --- a/src/Umbraco.Tests/TestHelpers/TestObjects.cs +++ b/src/Umbraco.Tests/TestHelpers/TestObjects.cs @@ -30,11 +30,11 @@ namespace Umbraco.Tests.TestHelpers /// internal partial class TestObjects { - private readonly IContainer _container; + private readonly IRegister _register; - public TestObjects(IContainer container) + public TestObjects(IRegister register) { - _container = container; + _register = register; } /// @@ -67,7 +67,7 @@ namespace Umbraco.Tests.TestHelpers return new UmbracoDatabase(connection, sqlContext, logger); } - public void RegisterServices(IContainer container) + public void RegisterServices(IRegister register) { } /// @@ -93,7 +93,7 @@ namespace Umbraco.Tests.TestHelpers IEventMessagesFactory eventMessagesFactory, IEnumerable urlSegmentProviders, TypeLoader typeLoader, - IContainer container = null) + IFactory factory = null) { if (scopeProvider == null) throw new ArgumentNullException(nameof(scopeProvider)); if (scopeAccessor == null) throw new ArgumentNullException(nameof(scopeAccessor)); @@ -106,12 +106,12 @@ namespace Umbraco.Tests.TestHelpers var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger); - var externalLoginService = GetLazyService(container, c => new ExternalLoginService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); - var publicAccessService = GetLazyService(container, c => new PublicAccessService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); - var domainService = GetLazyService(container, c => new DomainService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); - var auditService = GetLazyService(container, c => new AuditService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c))); + var externalLoginService = GetLazyService(factory, c => new ExternalLoginService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); + var publicAccessService = GetLazyService(factory, c => new PublicAccessService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); + var domainService = GetLazyService(factory, c => new DomainService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); + var auditService = GetLazyService(factory, c => new AuditService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c))); - var localizedTextService = GetLazyService(container, c => new LocalizedTextService( + var localizedTextService = GetLazyService(factory, c => new LocalizedTextService( new Lazy(() => { var mainLangFolder = new DirectoryInfo(IOHelper.MapPath(SystemDirectories.Umbraco + "/config/lang/")); @@ -146,34 +146,34 @@ namespace Umbraco.Tests.TestHelpers var runtimeState = Mock.Of(); var idkMap = new IdkMap(scopeProvider); - var localizationService = GetLazyService(container, c => new LocalizationService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c))); - var userService = GetLazyService(container, c => new UserService(scopeProvider, logger, eventMessagesFactory, runtimeState, GetRepo(c), GetRepo(c),globalSettings)); - var dataTypeService = GetLazyService(container, c => new DataTypeService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); - var contentService = GetLazyService(container, c => new ContentService(scopeProvider, logger, eventMessagesFactory, mediaFileSystem, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); - var notificationService = GetLazyService(container, c => new NotificationService(scopeProvider, userService.Value, contentService.Value, localizationService.Value, logger, GetRepo(c), globalSettings, umbracoSettings.Content)); - var serverRegistrationService = GetLazyService(container, c => new ServerRegistrationService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); - var memberGroupService = GetLazyService(container, c => new MemberGroupService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); - var memberService = GetLazyService(container, c => new MemberService(scopeProvider, logger, eventMessagesFactory, memberGroupService.Value, mediaFileSystem, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); - var mediaService = GetLazyService(container, c => new MediaService(scopeProvider, mediaFileSystem, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); - var contentTypeService = GetLazyService(container, c => new ContentTypeService(scopeProvider, logger, eventMessagesFactory, contentService.Value, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); - var mediaTypeService = GetLazyService(container, c => new MediaTypeService(scopeProvider, logger, eventMessagesFactory, mediaService.Value, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); - var fileService = GetLazyService(container, c => new FileService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); + var localizationService = GetLazyService(factory, c => new LocalizationService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c))); + var userService = GetLazyService(factory, c => new UserService(scopeProvider, logger, eventMessagesFactory, runtimeState, GetRepo(c), GetRepo(c),globalSettings)); + var dataTypeService = GetLazyService(factory, c => new DataTypeService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); + var contentService = GetLazyService(factory, c => new ContentService(scopeProvider, logger, eventMessagesFactory, mediaFileSystem, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); + var notificationService = GetLazyService(factory, c => new NotificationService(scopeProvider, userService.Value, contentService.Value, localizationService.Value, logger, GetRepo(c), globalSettings, umbracoSettings.Content)); + var serverRegistrationService = GetLazyService(factory, c => new ServerRegistrationService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); + var memberGroupService = GetLazyService(factory, c => new MemberGroupService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); + var memberService = GetLazyService(factory, c => new MemberService(scopeProvider, logger, eventMessagesFactory, memberGroupService.Value, mediaFileSystem, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); + var mediaService = GetLazyService(factory, c => new MediaService(scopeProvider, mediaFileSystem, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); + var contentTypeService = GetLazyService(factory, c => new ContentTypeService(scopeProvider, logger, eventMessagesFactory, contentService.Value, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); + var mediaTypeService = GetLazyService(factory, c => new MediaTypeService(scopeProvider, logger, eventMessagesFactory, mediaService.Value, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); + var fileService = GetLazyService(factory, c => new FileService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c), GetRepo(c))); - var memberTypeService = GetLazyService(container, c => new MemberTypeService(scopeProvider, logger, eventMessagesFactory, memberService.Value, GetRepo(c), GetRepo(c), GetRepo(c))); - var entityService = GetLazyService(container, c => new EntityService( + var memberTypeService = GetLazyService(factory, c => new MemberTypeService(scopeProvider, logger, eventMessagesFactory, memberService.Value, GetRepo(c), GetRepo(c), GetRepo(c))); + var entityService = GetLazyService(factory, c => new EntityService( scopeProvider, logger, eventMessagesFactory, contentService.Value, contentTypeService.Value, mediaService.Value, mediaTypeService.Value, dataTypeService.Value, memberService.Value, memberTypeService.Value, idkMap, GetRepo(c))); - var macroService = GetLazyService(container, c => new MacroService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c))); - var packagingService = GetLazyService(container, c => new PackagingService(logger, contentService.Value, contentTypeService.Value, mediaService.Value, macroService.Value, dataTypeService.Value, fileService.Value, localizationService.Value, entityService.Value, userService.Value, scopeProvider, urlSegmentProviders, GetRepo(c), GetRepo(c), new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty())))); - var relationService = GetLazyService(container, c => new RelationService(scopeProvider, logger, eventMessagesFactory, entityService.Value, GetRepo(c), GetRepo(c))); - var treeService = GetLazyService(container, c => new ApplicationTreeService(logger, cache, typeLoader)); - var tagService = GetLazyService(container, c => new TagService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); - var sectionService = GetLazyService(container, c => new SectionService(userService.Value, treeService.Value, scopeProvider, cache)); - var redirectUrlService = GetLazyService(container, c => new RedirectUrlService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); - var consentService = GetLazyService(container, c => new ConsentService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); + var macroService = GetLazyService(factory, c => new MacroService(scopeProvider, logger, eventMessagesFactory, GetRepo(c), GetRepo(c))); + var packagingService = GetLazyService(factory, c => new PackagingService(logger, contentService.Value, contentTypeService.Value, mediaService.Value, macroService.Value, dataTypeService.Value, fileService.Value, localizationService.Value, entityService.Value, userService.Value, scopeProvider, urlSegmentProviders, GetRepo(c), GetRepo(c), new PropertyEditorCollection(new DataEditorCollection(Enumerable.Empty())))); + var relationService = GetLazyService(factory, c => new RelationService(scopeProvider, logger, eventMessagesFactory, entityService.Value, GetRepo(c), GetRepo(c))); + var treeService = GetLazyService(factory, c => new ApplicationTreeService(logger, cache, typeLoader)); + var tagService = GetLazyService(factory, c => new TagService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); + var sectionService = GetLazyService(factory, c => new SectionService(userService.Value, treeService.Value, scopeProvider, cache)); + var redirectUrlService = GetLazyService(factory, c => new RedirectUrlService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); + var consentService = GetLazyService(factory, c => new ConsentService(scopeProvider, logger, eventMessagesFactory, GetRepo(c))); return new ServiceContext( publicAccessService, diff --git a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs index 8128666898..cc3ddb6f6a 100644 --- a/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs +++ b/src/Umbraco.Tests/TestHelpers/TestWithDatabaseBase.cs @@ -58,7 +58,7 @@ namespace Umbraco.Tests.TestHelpers internal ScopeProvider ScopeProvider => Current.ScopeProvider as ScopeProvider; - protected ISqlContext SqlContext => Container.GetInstance(); + protected ISqlContext SqlContext => Factory.GetInstance(); public override void SetUp() { @@ -72,15 +72,15 @@ namespace Umbraco.Tests.TestHelpers { base.Compose(); - Container.Register(); - Container.Register(factory => PublishedSnapshotService); - Container.Register(factory => DefaultCultureAccessor); + Composition.Register(); + Composition.Register(factory => PublishedSnapshotService); + Composition.Register(factory => DefaultCultureAccessor); Composition.GetCollectionBuilder() .Clear() .Add(() => Composition.TypeLoader.GetDataEditors()); - Container.RegisterSingleton(f => + Composition.RegisterSingleton(f => { if (Options.Database == UmbracoTestOptions.Database.None) return TestObjects.GetDatabaseFactoryMock(); @@ -101,7 +101,7 @@ namespace Umbraco.Tests.TestHelpers public override void TearDown() { - var profilingLogger = Container.TryGetInstance(); + var profilingLogger = Factory.TryGetInstance(); var timer = profilingLogger?.TraceDuration("teardown"); // fixme move that one up try { @@ -250,10 +250,10 @@ namespace Umbraco.Tests.TestHelpers var cache = NullCacheProvider.Instance; ContentTypesCache = new PublishedContentTypeCache( - Container.GetInstance(), - Container.GetInstance(), - Container.GetInstance(), - Container.GetInstance(), + Factory.GetInstance(), + Factory.GetInstance(), + Factory.GetInstance(), + Factory.GetInstance(), Logger); // testing=true so XmlStore will not use the file nor the database @@ -262,13 +262,13 @@ namespace Umbraco.Tests.TestHelpers var variationContextAccessor = new TestVariationContextAccessor(); var service = new PublishedSnapshotService( ServiceContext, - Container.GetInstance(), + Factory.GetInstance(), ScopeProvider, cache, publishedSnapshotAccessor, variationContextAccessor, - Container.GetInstance(), Container.GetInstance(), Container.GetInstance(), + Factory.GetInstance(), Factory.GetInstance(), Factory.GetInstance(), DefaultCultureAccessor, Logger, - Container.GetInstance(), new SiteDomainHelper(), + Factory.GetInstance(), new SiteDomainHelper(), ContentTypesCache, null, true, Options.PublishedRepositoryEvents); @@ -369,11 +369,11 @@ namespace Umbraco.Tests.TestHelpers var umbracoContext = new UmbracoContext( httpContext, service, - new WebSecurity(httpContext, Container.GetInstance(), - Container.GetInstance()), - umbracoSettings ?? Container.GetInstance(), + new WebSecurity(httpContext, Factory.GetInstance(), + Factory.GetInstance()), + umbracoSettings ?? Factory.GetInstance(), urlProviders ?? Enumerable.Empty(), - globalSettings ?? Container.GetInstance(), + globalSettings ?? Factory.GetInstance(), new TestVariationContextAccessor()); if (setSingleton) diff --git a/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs b/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs index 1c4df69e54..5ffab2c3b3 100644 --- a/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs +++ b/src/Umbraco.Tests/Testing/TestingTests/MockTests.cs @@ -53,11 +53,11 @@ namespace Umbraco.Tests.Testing.TestingTests var umbracoContext = TestObjects.GetUmbracoContextMock(); // unless we can inject them in MembershipHelper, we need need this - Container.Register(_ => Mock.Of()); - Container.Register(_ => Mock.Of()); - Container.Register(_ => Mock.Of()); - Container.Register(_ => CacheHelper.Disabled); - Container.Register(); + Composition.Register(_ => Mock.Of()); + Composition.Register(_ => Mock.Of()); + Composition.Register(_ => Mock.Of()); + Composition.Register(_ => CacheHelper.Disabled); + Composition.Register(); // ReSharper disable once UnusedVariable var helper = new UmbracoHelper(umbracoContext, diff --git a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs index d81d71511c..37c5853c36 100644 --- a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs +++ b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs @@ -78,7 +78,7 @@ namespace Umbraco.Tests.Testing protected Composition Composition { get; private set; } - protected IContainer Container { get; private set; } + protected IFactory Factory { get; private set; } protected UmbracoTestAttribute Options { get; private set; } @@ -94,17 +94,17 @@ namespace Umbraco.Tests.Testing #region Accessors - protected ILogger Logger => Container.GetInstance(); + protected ILogger Logger => Factory.GetInstance(); - protected IProfiler Profiler => Container.GetInstance(); + protected IProfiler Profiler => Factory.GetInstance(); - protected virtual IProfilingLogger ProfilingLogger => Container.GetInstance(); + protected virtual IProfilingLogger ProfilingLogger => Factory.GetInstance(); - protected CacheHelper CacheHelper => Container.GetInstance(); + protected CacheHelper CacheHelper => Factory.GetInstance(); - protected virtual ISqlSyntaxProvider SqlSyntax => Container.GetInstance(); + protected virtual ISqlSyntaxProvider SqlSyntax => Factory.GetInstance(); - protected IMapperCollection Mappers => Container.GetInstance(); + protected IMapperCollection Mappers => Factory.GetInstance(); #endregion @@ -127,19 +127,19 @@ namespace Umbraco.Tests.Testing var globalSettings = SettingsForTests.GetDefaultGlobalSettings(); var typeLoader = GetTypeLoader(cacheHelper.RuntimeCache, globalSettings, proflogger, Options.TypeLoader); - Container = ContainerFactory.Create(); - Current.Factory = Container; + var register = RegisterFactory.Create(); - Container.RegisterInstance(typeLoader); - Container.RegisterInstance(logger); - Container.RegisterInstance(profiler); - Container.RegisterInstance(proflogger); - Container.RegisterInstance(cacheHelper); - Container.RegisterInstance(cacheHelper.RuntimeCache); + register.RegisterInstance(typeLoader); + register.RegisterInstance(logger); + register.RegisterInstance(profiler); + register.RegisterInstance(proflogger); + register.RegisterInstance(cacheHelper); + register.RegisterInstance(cacheHelper.RuntimeCache); - Composition = new Composition(Container, typeLoader, proflogger, RuntimeLevel.Run); - TestObjects = new TestObjects(Container); + Composition = new Composition(register, typeLoader, proflogger, RuntimeLevel.Run); + TestObjects = new TestObjects(register); Compose(); + Current.Factory = Factory = register.CreateFactory(); Initialize(); } @@ -210,11 +210,11 @@ namespace Umbraco.Tests.Testing Umbraco.Web.Composing.Current.UmbracoContextAccessor = new TestUmbracoContextAccessor(); // web - Container.Register(_ => Umbraco.Web.Composing.Current.UmbracoContextAccessor); - Container.RegisterSingleton(); + Composition.Register(_ => Umbraco.Web.Composing.Current.UmbracoContextAccessor); + Composition.RegisterSingleton(); Composition.GetCollectionBuilder(); - Container.Register(); - Container.Register(); + Composition.Register(); + Composition.Register(); } protected virtual void ComposeWtf() @@ -222,14 +222,14 @@ namespace Umbraco.Tests.Testing // what else? var runtimeStateMock = new Mock(); runtimeStateMock.Setup(x => x.Level).Returns(RuntimeLevel.Run); - Container.RegisterSingleton(f => runtimeStateMock.Object); + Composition.RegisterSingleton(f => runtimeStateMock.Object); // ah... Composition.GetCollectionBuilder(); Composition.GetCollectionBuilder(); - Container.RegisterSingleton(); + Composition.RegisterSingleton(); - Container.RegisterSingleton(); + Composition.RegisterSingleton(); // register empty content apps collection Composition.GetCollectionBuilder(); @@ -301,58 +301,58 @@ namespace Umbraco.Tests.Testing Composition.ComposeRepositories(); // register basic stuff that might need to be there for some container resolvers to work - Container.RegisterSingleton(factory => umbracoSettings); - Container.RegisterSingleton(factory => globalSettings); - Container.RegisterSingleton(factory => umbracoSettings.Content); - Container.RegisterSingleton(factory => umbracoSettings.Templates); - Container.RegisterSingleton(factory => umbracoSettings.WebRouting); + Composition.RegisterSingleton(factory => umbracoSettings); + Composition.RegisterSingleton(factory => globalSettings); + Composition.RegisterSingleton(factory => umbracoSettings.Content); + Composition.RegisterSingleton(factory => umbracoSettings.Templates); + Composition.RegisterSingleton(factory => umbracoSettings.WebRouting); - Container.RegisterSingleton(factory => ExamineManager.Instance); + Composition.RegisterSingleton(factory => ExamineManager.Instance); // register filesystems - Container.RegisterSingleton(factory => TestObjects.GetFileSystemsMock()); + Composition.RegisterSingleton(factory => TestObjects.GetFileSystemsMock()); var logger = Mock.Of(); var scheme = Mock.Of(); var config = Mock.Of(); var mediaFileSystem = new MediaFileSystem(Mock.Of(), config, scheme, logger); - Container.RegisterSingleton(factory => mediaFileSystem); + Composition.RegisterSingleton(factory => mediaFileSystem); // no factory (noop) - Container.RegisterSingleton(); + Composition.RegisterSingleton(); // register application stuff (database factory & context, services...) Composition.GetCollectionBuilder() .AddCoreMappers(); - Container.RegisterSingleton(_ => new TransientEventMessagesFactory()); - Container.RegisterSingleton(f => new UmbracoDatabaseFactory( + Composition.RegisterSingleton(_ => new TransientEventMessagesFactory()); + Composition.RegisterSingleton(f => new UmbracoDatabaseFactory( Constants.System.UmbracoConnectionName, Logger, new Lazy(() => Mock.Of()))); - Container.RegisterSingleton(f => f.TryGetInstance().SqlContext); + Composition.RegisterSingleton(f => f.TryGetInstance().SqlContext); Composition.GetCollectionBuilder(); // empty - Container.RegisterSingleton(factory + Composition.RegisterSingleton(factory => TestObjects.GetScopeProvider(factory.TryGetInstance(), factory.TryGetInstance(), factory.TryGetInstance())); - Container.RegisterSingleton(factory => (IScopeAccessor) factory.GetInstance()); + Composition.RegisterSingleton(factory => (IScopeAccessor) factory.GetInstance()); Composition.ComposeServices(); // composition root is doing weird things, fix - Container.RegisterSingleton(); - Container.RegisterSingleton(); + Composition.RegisterSingleton(); + Composition.RegisterSingleton(); // somehow property editor ends up wanting this Composition.GetCollectionBuilder(); - Container.RegisterSingleton(); + Composition.RegisterSingleton(); // note - don't register collections, use builders Composition.GetCollectionBuilder(); - Container.RegisterSingleton(); - Container.RegisterSingleton(); + Composition.RegisterSingleton(); + Composition.RegisterSingleton(); } #endregion @@ -365,7 +365,7 @@ namespace Umbraco.Tests.Testing Mapper.Initialize(configuration => { - var profiles = Container.GetAllInstances(); + var profiles = Factory.GetAllInstances(); foreach (var profile in profiles) configuration.AddProfile(profile); }); @@ -402,7 +402,7 @@ namespace Umbraco.Tests.Testing // reset and dispose scopes // ensures we don't leak an opened database connection // which would lock eg SqlCe .sdf files - if (Container?.TryGetInstance() is ScopeProvider scopeProvider) + if (Factory?.TryGetInstance() is ScopeProvider scopeProvider) { Core.Scoping.Scope scope; while ((scope = scopeProvider.AmbientScope) != null) @@ -414,8 +414,9 @@ namespace Umbraco.Tests.Testing Current.Reset(); - Container?.Dispose(); - Container = null; + // fixme what should we dispose? IRegister or IFactory or? + //Container?.Dispose(); + //Container = null; // reset all other static things that should not be static ;( UriUtility.ResetAppDomainAppVirtualPath(); diff --git a/src/Umbraco.Tests/TreesAndSections/SectionTests.cs b/src/Umbraco.Tests/TreesAndSections/SectionTests.cs index 077245fb82..91f2cef961 100644 --- a/src/Umbraco.Tests/TreesAndSections/SectionTests.cs +++ b/src/Umbraco.Tests/TreesAndSections/SectionTests.cs @@ -22,7 +22,7 @@ namespace Umbraco.Tests.TreesAndSections protected override void Compose() { base.Compose(); - Container.Register(); + Composition.Register(); } public override void SetUp() diff --git a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs index e496d90dd1..eea755455d 100644 --- a/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs +++ b/src/Umbraco.Tests/UmbracoExamine/ExamineBaseTest.cs @@ -28,7 +28,7 @@ namespace Umbraco.Tests.UmbracoExamine { base.Compose(); - Container.RegisterSingleton(_ => new DefaultShortStringHelper(SettingsForTests.GetDefaultUmbracoSettings())); + Composition.RegisterSingleton(_ => new DefaultShortStringHelper(SettingsForTests.GetDefaultUmbracoSettings())); } } } diff --git a/src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs b/src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs index 8abe2fcc18..8aae044c55 100644 --- a/src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs +++ b/src/Umbraco.Tests/Web/Controllers/ContentControllerTests.cs @@ -81,14 +81,14 @@ namespace Umbraco.Tests.Web.Controllers var textService = new Mock(); textService.Setup(x => x.Localize(It.IsAny(), It.IsAny(), It.IsAny>())).Returns(""); - Container.RegisterSingleton(f => Mock.Of()); - Container.RegisterSingleton(f => userServiceMock.Object); - Container.RegisterSingleton(f => entityService.Object); - Container.RegisterSingleton(f => dataTypeService.Object); - Container.RegisterSingleton(f => langService.Object); - Container.RegisterSingleton(f => textService.Object); - Container.RegisterSingleton(f => Mock.Of()); - Container.RegisterSingleton(f => new UmbracoApiControllerTypeCollection(new[] { typeof(ContentTreeController) })); + Composition.RegisterSingleton(f => Mock.Of()); + Composition.RegisterSingleton(f => userServiceMock.Object); + Composition.RegisterSingleton(f => entityService.Object); + Composition.RegisterSingleton(f => dataTypeService.Object); + Composition.RegisterSingleton(f => langService.Object); + Composition.RegisterSingleton(f => textService.Object); + Composition.RegisterSingleton(f => Mock.Of()); + Composition.RegisterSingleton(f => new UmbracoApiControllerTypeCollection(new[] { typeof(ContentTreeController) })); } private MultipartFormDataContent GetMultiPartRequestContent(string json) diff --git a/src/Umbraco.Tests/Web/Controllers/UsersControllerTests.cs b/src/Umbraco.Tests/Web/Controllers/UsersControllerTests.cs index 4292cffdb0..d62cf7b93c 100644 --- a/src/Umbraco.Tests/Web/Controllers/UsersControllerTests.cs +++ b/src/Umbraco.Tests/Web/Controllers/UsersControllerTests.cs @@ -38,12 +38,12 @@ namespace Umbraco.Tests.Web.Controllers // replace the true IUserService implementation with a mock // so that each test can configure the service to their liking - Container.RegisterSingleton(f => Mock.Of()); + Composition.RegisterSingleton(f => Mock.Of()); // kill the true IEntityService too - Container.RegisterSingleton(f => Mock.Of()); + Composition.RegisterSingleton(f => Mock.Of()); - Container.RegisterSingleton(); + Composition.RegisterSingleton(); } [Test] diff --git a/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs b/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs index ada96a3895..6d8f1e38c8 100644 --- a/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs +++ b/src/Umbraco.Tests/Web/Mvc/SurfaceControllerTests.cs @@ -94,7 +94,7 @@ namespace Umbraco.Tests.Web.Mvc true); var controller = new TestSurfaceController(umbracoContext); - Container.Register(_ => umbracoContext); + Composition.Register(_ => umbracoContext); Assert.IsNotNull(controller.Umbraco); } diff --git a/src/Umbraco.Web/Components/DatabaseServerRegistrarAndMessengerComponent.cs b/src/Umbraco.Web/Components/DatabaseServerRegistrarAndMessengerComponent.cs index 8e01b61302..be632bdd14 100644 --- a/src/Umbraco.Web/Components/DatabaseServerRegistrarAndMessengerComponent.cs +++ b/src/Umbraco.Web/Components/DatabaseServerRegistrarAndMessengerComponent.cs @@ -54,12 +54,12 @@ namespace Umbraco.Web.Components { composition.SetServerMessenger(factory => { - var runtime = RegisterExtensions.GetInstance(factory); - var databaseFactory = RegisterExtensions.GetInstance(factory); - var globalSettings = RegisterExtensions.GetInstance(factory); - var proflog = RegisterExtensions.GetInstance(factory); - var scopeProvider = RegisterExtensions.GetInstance(factory); - var sqlContext = RegisterExtensions.GetInstance(factory); + var runtime = factory.GetInstance(); + var databaseFactory = factory.GetInstance(); + var globalSettings = factory.GetInstance(); + var proflog = factory.GetInstance(); + var scopeProvider = factory.GetInstance(); + var sqlContext = factory.GetInstance(); return new BatchedDatabaseServerMessenger( runtime, databaseFactory, scopeProvider, sqlContext, proflog, globalSettings, diff --git a/src/Umbraco.Web/Composing/LightInject/LightInjectContainer.cs b/src/Umbraco.Web/Composing/LightInject/LightInjectContainer.cs index 0237e2a641..ae7f769753 100644 --- a/src/Umbraco.Web/Composing/LightInject/LightInjectContainer.cs +++ b/src/Umbraco.Web/Composing/LightInject/LightInjectContainer.cs @@ -1,13 +1,12 @@ using System; using System.Web.Http; using LightInject; -using Umbraco.Core.Composing; using Umbraco.Core.Composing.LightInject; namespace Umbraco.Web.Composing.LightInject { /// - /// Implements with LightInject. + /// Implements DI with LightInject. /// public class LightInjectContainer : Core.Composing.LightInject.LightInjectContainer { @@ -25,7 +24,7 @@ namespace Umbraco.Web.Composing.LightInject => new LightInjectContainer(CreateServiceContainer()); /// - public override IContainer ConfigureForWeb() + public override void ConfigureForWeb() { // IoC setup for LightInject for MVC/WebApi // see comments on MixedLightInjectScopeManagerProvider for explainations of what we are doing here @@ -34,8 +33,6 @@ namespace Umbraco.Web.Composing.LightInject Container.EnableMvc(); // does container.EnablePerWebRequestScope() Container.ScopeManagerProvider = smp; // reverts - we will do it last (in WebRuntime) Container.EnableWebApi(GlobalConfiguration.Configuration); - - return this; } } } diff --git a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs index 5183cd0c3c..4504c22161 100644 --- a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs +++ b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs @@ -94,7 +94,7 @@ namespace Umbraco.Web } if (cacheByMember) { - var helper = RegisterExtensions.GetInstance(Current.Factory); + var helper = Current.Factory.GetInstance(); var currentMember = helper.GetCurrentMember(); cacheKey.AppendFormat("m{0}-", currentMember == null ? 0 : currentMember.Id); } diff --git a/src/Umbraco.Web/Models/LoginStatusModel.cs b/src/Umbraco.Web/Models/LoginStatusModel.cs index 5f9391dc7c..d253a364ae 100644 --- a/src/Umbraco.Web/Models/LoginStatusModel.cs +++ b/src/Umbraco.Web/Models/LoginStatusModel.cs @@ -24,7 +24,7 @@ namespace Umbraco.Web.Models { if (doLookup && Current.UmbracoContext != null) { - var helper = RegisterExtensions.GetInstance(Current.Factory); + var helper = Current.Factory.GetInstance(); var model = helper.GetCurrentLoginStatus(); if (model != null) { diff --git a/src/Umbraco.Web/Models/ProfileModel.cs b/src/Umbraco.Web/Models/ProfileModel.cs index a3c26812a3..8e66042d21 100644 --- a/src/Umbraco.Web/Models/ProfileModel.cs +++ b/src/Umbraco.Web/Models/ProfileModel.cs @@ -28,7 +28,7 @@ namespace Umbraco.Web.Models MemberProperties = new List(); if (doLookup && Current.UmbracoContext != null) { - var helper = RegisterExtensions.GetInstance(Current.Factory); + var helper = Current.Factory.GetInstance(); var model = helper.GetCurrentMemberProfileModel(); MemberProperties = model.MemberProperties; } diff --git a/src/Umbraco.Web/Models/RegisterModel.cs b/src/Umbraco.Web/Models/RegisterModel.cs index 26c3d2428c..44845bfd43 100644 --- a/src/Umbraco.Web/Models/RegisterModel.cs +++ b/src/Umbraco.Web/Models/RegisterModel.cs @@ -32,7 +32,7 @@ namespace Umbraco.Web.Models CreatePersistentLoginCookie = true; if (doLookup && Current.UmbracoContext != null) { - var helper = RegisterExtensions.GetInstance(Current.Factory); + var helper = Current.Factory.GetInstance(); var model = helper.CreateRegistrationModel(MemberTypeAlias); MemberProperties = model.MemberProperties; } diff --git a/src/Umbraco.Web/Mvc/EnsurePublishedContentRequestAttribute.cs b/src/Umbraco.Web/Mvc/EnsurePublishedContentRequestAttribute.cs index 4c1c71a223..f243acd6d3 100644 --- a/src/Umbraco.Web/Mvc/EnsurePublishedContentRequestAttribute.cs +++ b/src/Umbraco.Web/Mvc/EnsurePublishedContentRequestAttribute.cs @@ -74,7 +74,7 @@ namespace Umbraco.Web.Mvc protected UmbracoContext UmbracoContext => _umbracoContext ?? (_umbracoContext = UmbracoContext.Current); // todo - try lazy property injection? - private PublishedRouter PublishedRouter => RegisterExtensions.GetInstance(Core.Composing.Current.Factory); + private PublishedRouter PublishedRouter => Core.Composing.Current.Factory.GetInstance(); /// /// Exposes an UmbracoHelper diff --git a/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs b/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs index b3449c245d..b51c0eddfc 100644 --- a/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs +++ b/src/Umbraco.Web/Mvc/UmbracoViewPageOfTModel.cs @@ -109,8 +109,8 @@ namespace Umbraco.Web.Mvc protected UmbracoViewPage() : this( - RegisterExtensions.GetInstance(Current.Factory), - RegisterExtensions.GetInstance(Current.Factory) + Current.Factory.GetInstance(), + Current.Factory.GetInstance() ) { } diff --git a/src/Umbraco.Web/Runtime/WebRuntime.cs b/src/Umbraco.Web/Runtime/WebRuntime.cs index d9283ce0d7..621bab282d 100644 --- a/src/Umbraco.Web/Runtime/WebRuntime.cs +++ b/src/Umbraco.Web/Runtime/WebRuntime.cs @@ -28,7 +28,7 @@ namespace Umbraco.Web.Runtime } /// - public override void Boot(IContainer container) + public override void Boot(IRegister register) { // create and start asap to profile boot var debug = GlobalSettings.DebugMode; @@ -44,10 +44,10 @@ namespace Umbraco.Web.Runtime _webProfiler = new VoidProfiler(); } - base.Boot(container); + base.Boot(register); // now (and only now) is the time to switch over to perWebRequest scopes - container.EnablePerWebRequestScope(); + register.EnablePerWebRequestScope(); } /// diff --git a/src/Umbraco.Web/Templates/TemplateRenderer.cs b/src/Umbraco.Web/Templates/TemplateRenderer.cs index 282aef8a58..9c2c4973e0 100644 --- a/src/Umbraco.Web/Templates/TemplateRenderer.cs +++ b/src/Umbraco.Web/Templates/TemplateRenderer.cs @@ -41,7 +41,7 @@ namespace Umbraco.Web.Templates } // todo - inject! - private PublishedRouter PublishedRouter => RegisterExtensions.GetInstance(Core.Composing.Current.Factory); + private PublishedRouter PublishedRouter => Core.Composing.Current.Factory.GetInstance(); /// diff --git a/src/Umbraco.Web/UI/Controls/UmbracoUserControl.cs b/src/Umbraco.Web/UI/Controls/UmbracoUserControl.cs index e04952b2e6..d535d61ba4 100644 --- a/src/Umbraco.Web/UI/Controls/UmbracoUserControl.cs +++ b/src/Umbraco.Web/UI/Controls/UmbracoUserControl.cs @@ -30,7 +30,7 @@ namespace Umbraco.Web.UI.Controls if (umbracoContext == null) throw new ArgumentNullException(nameof(umbracoContext)); UmbracoContext = umbracoContext; Umbraco = new UmbracoHelper(umbracoContext, services, appCache); - Members = RegisterExtensions.GetInstance(Current.Factory); + Members = Current.Factory.GetInstance(); // fixme inject somehow Logger = Current.Logger; diff --git a/src/Umbraco.Web/UmbracoApplicationBase.cs b/src/Umbraco.Web/UmbracoApplicationBase.cs index b778a04967..7b8fa56201 100644 --- a/src/Umbraco.Web/UmbracoApplicationBase.cs +++ b/src/Umbraco.Web/UmbracoApplicationBase.cs @@ -23,11 +23,11 @@ namespace Umbraco.Web protected abstract IRuntime GetRuntime(); /// - /// Gets the application container. + /// Gets the application register. /// - protected virtual IContainer GetContainer() + protected virtual IRegister GetContainer() { - return ContainerFactory.Create(); + return RegisterFactory.Create(); } // events - in the order they trigger diff --git a/src/Umbraco.Web/UmbracoHelper.cs b/src/Umbraco.Web/UmbracoHelper.cs index 8fcbb040b5..03913ee027 100644 --- a/src/Umbraco.Web/UmbracoHelper.cs +++ b/src/Umbraco.Web/UmbracoHelper.cs @@ -156,7 +156,7 @@ namespace Umbraco.Web /// Gets the membership helper. /// public MembershipHelper MembershipHelper => _membershipHelper - ?? (_membershipHelper = RegisterExtensions.GetInstance(Current.Factory)); + ?? (_membershipHelper = Current.Factory.GetInstance()); /// /// Gets the url provider.