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?!