diff --git a/src/Umbraco.Core/Dictionary/CultureDictionaryFactoryResolver.cs b/src/Umbraco.Core/Dictionary/CultureDictionaryFactoryResolver.cs index f2f7632cb4..bda3992ff6 100644 --- a/src/Umbraco.Core/Dictionary/CultureDictionaryFactoryResolver.cs +++ b/src/Umbraco.Core/Dictionary/CultureDictionaryFactoryResolver.cs @@ -15,11 +15,9 @@ namespace Umbraco.Core.Dictionary /// Initializes the resolver to use IoC /// /// - /// - internal CultureDictionaryFactoryResolver(IServiceContainer container, Type implementationType) - : base(container, implementationType) - { - } + internal CultureDictionaryFactoryResolver(IServiceContainer container) + : base(container) + { } internal CultureDictionaryFactoryResolver(ICultureDictionaryFactory factory) : base(factory) diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedContentModelFactoryResolver.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedContentModelFactoryResolver.cs index da649342cb..23621e432f 100644 --- a/src/Umbraco.Core/Models/PublishedContent/PublishedContentModelFactoryResolver.cs +++ b/src/Umbraco.Core/Models/PublishedContent/PublishedContentModelFactoryResolver.cs @@ -9,16 +9,6 @@ namespace Umbraco.Core.Models.PublishedContent /// public class PublishedContentModelFactoryResolver : ContainerSingleObjectResolver { - /// - /// Initializes the resolver to use IoC - /// - /// - /// - internal PublishedContentModelFactoryResolver(IServiceContainer container, Type implementationType) - : base(container, implementationType) - { - } - /// /// Initializes a new instance of the . /// @@ -37,13 +27,12 @@ namespace Umbraco.Core.Models.PublishedContent { } /// - /// Initialize the resolver to use IoC, when using this contructor the type must be set manually + /// Initialize the resolver to use IoC /// /// internal PublishedContentModelFactoryResolver(IServiceContainer container) : base(container) - { - } + { } /// /// Sets the factory. diff --git a/src/Umbraco.Core/ObjectResolution/ContainerLazyManyObjectsResolver.cs b/src/Umbraco.Core/ObjectResolution/ContainerLazyManyObjectsResolver.cs index 8b71508f2b..ba35324094 100644 --- a/src/Umbraco.Core/ObjectResolution/ContainerLazyManyObjectsResolver.cs +++ b/src/Umbraco.Core/ObjectResolution/ContainerLazyManyObjectsResolver.cs @@ -26,7 +26,7 @@ namespace Umbraco.Core.ObjectResolution Container = container; //Register ourselves in the case that a resolver instance should be injected someplace - Container.Register(factory => (TResolver)(object)this); + Container.Register(factory => (TResolver)(object)this); } /// diff --git a/src/Umbraco.Core/ObjectResolution/ContainerSingleObjectResolver.cs b/src/Umbraco.Core/ObjectResolution/ContainerSingleObjectResolver.cs index 5f054c138a..ddfaa5882c 100644 --- a/src/Umbraco.Core/ObjectResolution/ContainerSingleObjectResolver.cs +++ b/src/Umbraco.Core/ObjectResolution/ContainerSingleObjectResolver.cs @@ -1,7 +1,7 @@ using System; using System.Linq; -using System.Linq.Expressions; using LightInject; +using Umbraco.Core.Persistence.Migrations.Syntax.Create; namespace Umbraco.Core.ObjectResolution { @@ -41,21 +41,8 @@ namespace Umbraco.Core.ObjectResolution internal ContainerSingleObjectResolver(TResolved value, bool canBeNull) : base(value, canBeNull) { - } - #endregion - - /// - /// Initializes the resolver to use IoC - /// - /// - /// - internal ContainerSingleObjectResolver(IServiceContainer container, Type implementationType) - { - if (container == null) throw new ArgumentNullException("container"); - if (implementationType == null) throw new ArgumentNullException("implementationType"); - _container = container; - _container.Register(typeof(TResolved), implementationType, new PerContainerLifetime()); } + #endregion /// /// Initialize the resolver to use IoC, when using this contructor the type must be set manually @@ -63,7 +50,7 @@ namespace Umbraco.Core.ObjectResolution /// internal ContainerSingleObjectResolver(IServiceContainer container) { - if (container == null) throw new ArgumentNullException("container"); + if (container == null) throw new ArgumentNullException(nameof(container)); _container = container; } @@ -75,7 +62,7 @@ namespace Umbraco.Core.ObjectResolution internal ContainerSingleObjectResolver(IServiceContainer container, Func implementationType) { _container = container; - _container.Register(implementationType, new PerContainerLifetime()); + _container.Register(implementationType, new PerContainerLifetime()); } /// @@ -89,8 +76,9 @@ namespace Umbraco.Core.ObjectResolution { get { - if (_container == null) return base.Value; - return _container.GetInstance(); + return _container == null + ? base.Value + : _container.GetInstance(); } set { @@ -102,7 +90,7 @@ namespace Umbraco.Core.ObjectResolution { // must override with the proper name! _container.Override( - sr => sr.ServiceType == typeof (TResolved) && sr.ServiceName == GetType().FullName, + sr => sr.ServiceType == typeof (TResolved), (factory, registration) => { registration.Value = value; @@ -116,8 +104,9 @@ namespace Umbraco.Core.ObjectResolution _container.Register(new ServiceRegistration { ServiceType = typeof (TResolved), - ImplementingType = value.GetType(), - ServiceName = GetType().FullName, + // no! use Value below! + //ImplementingType = value.GetType(), + ServiceName = "", Lifetime = new PerContainerLifetime(), Value = value }); @@ -134,7 +123,7 @@ namespace Umbraco.Core.ObjectResolution { get { - if (_container == null) return base.HasValue; + if (_container == null) return base.HasValue; return (_container.TryGetInstance() == null) == false; } } diff --git a/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs b/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs index 9a71a2eee9..3548bb7f60 100644 --- a/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs +++ b/src/Umbraco.Core/Strings/ShortStringHelperResolver.cs @@ -14,9 +14,8 @@ namespace Umbraco.Core.Strings /// Initializes the resolver to use IoC /// /// - /// - internal ShortStringHelperResolver(IServiceContainer container, Type implementationType) - : base(container, implementationType) + internal ShortStringHelperResolver(IServiceContainer container) + : base(container) { Resolution.Frozen += (sender, args) => Value.Freeze(); } diff --git a/src/Umbraco.Core/Sync/ServerMessengerResolver.cs b/src/Umbraco.Core/Sync/ServerMessengerResolver.cs index 4571f92fec..9f631c9a3b 100644 --- a/src/Umbraco.Core/Sync/ServerMessengerResolver.cs +++ b/src/Umbraco.Core/Sync/ServerMessengerResolver.cs @@ -10,15 +10,13 @@ namespace Umbraco.Core.Sync /// public sealed class ServerMessengerResolver : ContainerSingleObjectResolver { - internal ServerMessengerResolver(IServiceContainer container, Type implementationType) - : base(container, implementationType) - { - } + internal ServerMessengerResolver(IServiceContainer container) + : base(container) + { } internal ServerMessengerResolver(IServiceContainer container, Func implementationType) : base(container, implementationType) - { - } + { } /// /// Sets the messenger. diff --git a/src/Umbraco.Core/Sync/ServerRegistrarResolver.cs b/src/Umbraco.Core/Sync/ServerRegistrarResolver.cs index f9637ff315..3199fad079 100644 --- a/src/Umbraco.Core/Sync/ServerRegistrarResolver.cs +++ b/src/Umbraco.Core/Sync/ServerRegistrarResolver.cs @@ -15,18 +15,17 @@ namespace Umbraco.Core.Sync /// /// An instance of a registrar. /// The resolver is created by the CoreBootManager and thus the constructor remains internal. - public ServerRegistrarResolver(IServerRegistrar value) : base(value) - { - } - internal ServerRegistrarResolver(IServiceContainer container, Type implementationType) - : base(container, implementationType) - { - } + public ServerRegistrarResolver(IServerRegistrar value) + : base(value) + { } + + internal ServerRegistrarResolver(IServiceContainer container) + : base(container) + { } internal ServerRegistrarResolver(IServiceContainer container, Func implementationType) : base(container, implementationType) - { - } + { } /// /// Sets the registrar. diff --git a/src/Umbraco.Tests/Integration/ContentEventsTests.cs b/src/Umbraco.Tests/Integration/ContentEventsTests.cs index 614e56bb8e..c695f3dedf 100644 --- a/src/Umbraco.Tests/Integration/ContentEventsTests.cs +++ b/src/Umbraco.Tests/Integration/ContentEventsTests.cs @@ -51,7 +51,8 @@ namespace Umbraco.Tests.Integration base.ConfigureContainer(); ServerRegistrarResolver.Current = new ServerRegistrarResolver(new DistributedCacheTests.TestServerRegistrar()); // localhost-only - ServerMessengerResolver.Current = new ServerMessengerResolver(Container, typeof(WebServiceServerMessenger)); + ServerMessengerResolver.Current = new ServerMessengerResolver(Container); + Container.Register(); CacheRefreshersResolver.Current = new CacheRefreshersResolver(Container, Mock.Of(), () => new[] { typeof(ContentTypeCacheRefresher), diff --git a/src/Umbraco.Web/Routing/ContentFinderByLegacy404.cs b/src/Umbraco.Web/Routing/ContentFinderByLegacy404.cs index 84ea2aeb78..bfd50447b4 100644 --- a/src/Umbraco.Web/Routing/ContentFinderByLegacy404.cs +++ b/src/Umbraco.Web/Routing/ContentFinderByLegacy404.cs @@ -17,7 +17,7 @@ namespace Umbraco.Web.Routing /// /// Provides an implementation of that runs the legacy 404 logic. /// - public class ContentFinderByLegacy404 : IContentFinder + public class ContentFinderByLegacy404 : IContentLastChanceFinder { private readonly ILogger _logger; diff --git a/src/Umbraco.Web/Routing/ContentLastChanceFinderResolver.cs b/src/Umbraco.Web/Routing/ContentLastChanceFinderResolver.cs index e2189be022..78db17968f 100644 --- a/src/Umbraco.Web/Routing/ContentLastChanceFinderResolver.cs +++ b/src/Umbraco.Web/Routing/ContentLastChanceFinderResolver.cs @@ -8,15 +8,14 @@ namespace Umbraco.Web.Routing /// /// Resolves the last chance IPublishedContentFinder object. /// - public sealed class ContentLastChanceFinderResolver : ContainerSingleObjectResolver + public sealed class ContentLastChanceFinderResolver : ContainerSingleObjectResolver { /// /// Initializes the resolver to use IoC /// /// - /// - internal ContentLastChanceFinderResolver(IServiceContainer container, Type implementationType) - : base(container, implementationType) + internal ContentLastChanceFinderResolver(IServiceContainer container) + : base(container) { } /// @@ -24,7 +23,7 @@ namespace Umbraco.Web.Routing /// /// The finder. /// For developers, at application startup. - public void SetFinder(IContentFinder finder) + public void SetFinder(IContentLastChanceFinder finder) { Value = finder; } diff --git a/src/Umbraco.Web/Routing/IContentLastChanceFinder.cs b/src/Umbraco.Web/Routing/IContentLastChanceFinder.cs new file mode 100644 index 0000000000..91343b7d49 --- /dev/null +++ b/src/Umbraco.Web/Routing/IContentLastChanceFinder.cs @@ -0,0 +1,10 @@ +namespace Umbraco.Web.Routing +{ + /// + /// Provides a method to try to find and assign an Umbraco document to a PublishedContentRequest + /// when everything else has failed. + /// + /// Identical to but required in order to differenciate them in ioc. + public interface IContentLastChanceFinder : IContentFinder + { } +} diff --git a/src/Umbraco.Web/Routing/SiteDomainHelperResolver.cs b/src/Umbraco.Web/Routing/SiteDomainHelperResolver.cs index 3ff9010268..75c025c54f 100644 --- a/src/Umbraco.Web/Routing/SiteDomainHelperResolver.cs +++ b/src/Umbraco.Web/Routing/SiteDomainHelperResolver.cs @@ -1,6 +1,7 @@ using System; using System.Linq.Expressions; using LightInject; +using umbraco.cms.presentation; using Umbraco.Core.ObjectResolution; namespace Umbraco.Web.Routing @@ -14,11 +15,9 @@ namespace Umbraco.Web.Routing /// Initializes the resolver to use IoC /// /// - /// - internal SiteDomainHelperResolver(IServiceContainer container, Type implementationType) - : base(container, implementationType) - { - } + internal SiteDomainHelperResolver(IServiceContainer container) + : base(container) + { } /// /// Initializes a new instance of the class with an implementation. diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 60ad9360f5..703a2bcb15 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -263,6 +263,7 @@ + diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs index fbfc11f92d..ba7c1e7c62 100644 --- a/src/Umbraco.Web/WebBootManager.cs +++ b/src/Umbraco.Web/WebBootManager.cs @@ -519,7 +519,8 @@ namespace Umbraco.Web typeof(CustomRouteUrlProvider) ); - ContentLastChanceFinderResolver.Current = new ContentLastChanceFinderResolver(Container, typeof(ContentFinderByLegacy404)); + ContentLastChanceFinderResolver.Current = new ContentLastChanceFinderResolver(Container); + Container.Register(); ContentFinderResolver.Current = new ContentFinderResolver( Container, ProfilingLogger.Logger, @@ -534,7 +535,8 @@ namespace Umbraco.Web typeof(ContentFinderByRedirectUrl) ); - SiteDomainHelperResolver.Current = new SiteDomainHelperResolver(Container, typeof(SiteDomainHelper)); + SiteDomainHelperResolver.Current = new SiteDomainHelperResolver(Container); + Container.Register(); ThumbnailProvidersResolver.Current = new ThumbnailProvidersResolver( Container, ProfilingLogger.Logger, @@ -544,7 +546,8 @@ namespace Umbraco.Web ServiceProvider, ProfilingLogger.Logger, PluginManager.ResolveImageUrlProviders()); - CultureDictionaryFactoryResolver.Current = new CultureDictionaryFactoryResolver(Container, typeof(DefaultCultureDictionaryFactory)); + CultureDictionaryFactoryResolver.Current = new CultureDictionaryFactoryResolver(Container); + Container.Register(); HealthCheckResolver.Current = new HealthCheckResolver(Container, ProfilingLogger.Logger, () => PluginManager.ResolveTypes()); // fixme XML cache vs NuCache?!