diff --git a/src/Umbraco.Core/ObjectResolution/ContainerManyObjectsResolver.cs b/src/Umbraco.Core/ObjectResolution/ContainerManyObjectsResolver.cs index 79ffa75ca5..85bb754c2d 100644 --- a/src/Umbraco.Core/ObjectResolution/ContainerManyObjectsResolver.cs +++ b/src/Umbraco.Core/ObjectResolution/ContainerManyObjectsResolver.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Web; using LightInject; using Umbraco.Core.Logging; -using Umbraco.Core.Security; namespace Umbraco.Core.ObjectResolution { @@ -44,7 +43,6 @@ namespace Umbraco.Core.ObjectResolution } #endregion - /// /// Constructor for use with IoC /// @@ -55,14 +53,11 @@ namespace Umbraco.Core.ObjectResolution internal ContainerManyObjectsResolver(IServiceContainer container, ILogger logger, IEnumerable types, ObjectLifetimeScope scope = ObjectLifetimeScope.Application) : base(logger, types, scope) { - if (container == null) throw new ArgumentNullException("container"); + if (container == null) throw new ArgumentNullException(nameof(container)); _container = container; Resolution.Frozen += Resolution_Frozen; - } - - - + /// /// When resolution is frozen add all the types to the container /// @@ -70,9 +65,12 @@ namespace Umbraco.Core.ObjectResolution /// void Resolution_Frozen(object sender, EventArgs e) { + var prefix = GetType().FullName + "_"; + var i = 0; foreach (var type in InstanceTypes) { - _container.Register(type, GetLifetime(LifetimeScope)); + var name = prefix + i++; + _container.Register(typeof(TResolved), type, name, GetLifetime(LifetimeScope)); } } @@ -89,7 +87,7 @@ namespace Umbraco.Core.ObjectResolution return new PerRequestLifeTime(); case ObjectLifetimeScope.Application: return new PerContainerLifetime(); - case ObjectLifetimeScope.Transient: + //case ObjectLifetimeScope.Transient: default: return null; } @@ -103,8 +101,23 @@ namespace Umbraco.Core.ObjectResolution { //NOTE: we ignore scope because objects are registered under this scope and not build based on the scope. - return _container.GetAllInstances(); - } - + var prefix = GetType().FullName + "_"; + var services = _container.AvailableServices + .Where(x => x.ServiceName.StartsWith(prefix)) + .OrderBy(x => x.ServiceName); + var allInstances = _container.GetAllInstances() + .ToDictionary(x => x.GetType(), x => x); + + //foreach (var service in services) + // LogHelper.Debug("SERVICE " + service.ImplementingType.FullName + " " + service.ServiceName); + //foreach (var instance in allInstances) + // LogHelper.Debug("INSTANCE " + instance.Key.FullName); + + // GetAllInstances could return more than what *this* resolver has registered, + // and there is no guarantee instances will be in the right order - have to do + // it differently + //return _container.GetAllInstances(); + return services.Select(x => allInstances[x.ImplementingType]); + } } } \ No newline at end of file diff --git a/src/Umbraco.Web/Routing/ContentLastChanceFinderResolver.cs b/src/Umbraco.Web/Routing/ContentLastChanceFinderResolver.cs index 135ca25c0b..e2189be022 100644 --- a/src/Umbraco.Web/Routing/ContentLastChanceFinderResolver.cs +++ b/src/Umbraco.Web/Routing/ContentLastChanceFinderResolver.cs @@ -1,5 +1,4 @@ using System; -using System.Linq.Expressions; using LightInject; using Umbraco.Core.ObjectResolution; @@ -18,8 +17,7 @@ namespace Umbraco.Web.Routing /// internal ContentLastChanceFinderResolver(IServiceContainer container, Type implementationType) : base(container, implementationType) - { - } + { } /// /// Sets the last chance finder. @@ -34,10 +32,6 @@ namespace Umbraco.Web.Routing /// /// Gets the last chance finder. /// - public IContentFinder Finder - { - get { return Value; } - } - + public IContentFinder Finder => Value; } } \ No newline at end of file diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs index afacdf8d33..509b89039c 100644 --- a/src/Umbraco.Web/WebBootManager.cs +++ b/src/Umbraco.Web/WebBootManager.cs @@ -510,7 +510,7 @@ namespace Umbraco.Web UrlProviderResolver.Current = new UrlProviderResolver( Container, ProfilingLogger.Logger, - //typeof(AliasUrlProvider), // not enabled by default + //typeof(AliasUrlProvider), // not enabled by default typeof(DefaultUrlProvider), typeof(CustomRouteUrlProvider) ); @@ -520,7 +520,7 @@ namespace Umbraco.Web ContentFinderResolver.Current = new ContentFinderResolver( Container, ProfilingLogger.Logger, // all built-in finders in the correct order, devs can then modify this list - // on application startup via an application event handler. + // on application startup, via an application event handler. typeof(ContentFinderByPageIdQuery), typeof(ContentFinderByNiceUrl), typeof(ContentFinderByIdPath),