diff --git a/src/Umbraco.Core/Components/CompositionExtensions.cs b/src/Umbraco.Core/Components/CompositionExtensions.cs
index abc0fa3862..1bbb3faff0 100644
--- a/src/Umbraco.Core/Components/CompositionExtensions.cs
+++ b/src/Umbraco.Core/Components/CompositionExtensions.cs
@@ -172,16 +172,23 @@ namespace Umbraco.Core.Components
composition.Container.RegisterSingleton(_ => registrar);
}
- ///
- /// Sets the server messenger.
- ///
- /// The type of the server registrar.
- /// The composition.
- public static void SetServerMessenger(this Composition composition)
- where T : IServerMessenger
- {
- composition.Container.Register(Lifetime.Singleton);
- }
+
+ // review since only one is called in the core for now, I remove this
+ // it allows us to wrap the factory to "allow re-registration".
+ /////
+ ///// Sets the server messenger.
+ /////
+ ///// The type of the server registrar.
+ ///// The composition.
+ //public static void SetServerMessenger(this Composition composition)
+ // where T : IServerMessenger
+ //{
+ // composition.Container.Register(Lifetime.Singleton);
+ //}
+
+ private static Func serverMessengerFactory = null;
+ private static bool serverMessengerIsRegistered = false;
+ private static Func wrappedServerMessengerFactory = c => serverMessengerFactory(c);
///
/// Sets the server messenger.
@@ -190,7 +197,13 @@ namespace Umbraco.Core.Components
/// A function creating a server messenger.
public static void SetServerMessenger(this Composition composition, Func factory)
{
- composition.Container.RegisterSingleton(factory);
+ if (!serverMessengerIsRegistered)
+ {
+ serverMessengerIsRegistered = true;
+ composition.Container.RegisterSingleton(wrappedServerMessengerFactory);
+ }
+
+ serverMessengerFactory = factory;
}
///
@@ -200,7 +213,13 @@ namespace Umbraco.Core.Components
/// A server messenger.
public static void SetServerMessenger(this Composition composition, IServerMessenger registrar)
{
- composition.Container.RegisterSingleton(_ => registrar);
+ if (!serverMessengerIsRegistered)
+ {
+ serverMessengerIsRegistered = true;
+ composition.Container.RegisterSingleton(wrappedServerMessengerFactory);
+ }
+
+ serverMessengerFactory = c => registrar;
}
///
diff --git a/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs b/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs
index 9d7c3e5a6a..ae9955706c 100644
--- a/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs
+++ b/src/Umbraco.Core/Runtime/CoreRuntimeComponent.cs
@@ -74,7 +74,8 @@ namespace Umbraco.Core.Runtime
// by default we'll use the database server messenger with default options (no callbacks),
// this will be overridden by either the legacy thing or the db thing in the corresponding
// components in the web project - fixme - should obsolete the legacy thing
- composition.Container.RegisterSingleton(factory
+ composition.SetServerMessenger(
+ factory
=> new DatabaseServerMessenger(
factory.GetInstance(),
factory.GetInstance(),