Resvolution - ServerMessengerResolver
This commit is contained in:
@@ -433,9 +433,11 @@ namespace Umbraco.Core
|
||||
|
||||
//by default we'll use the database server messenger with default options (no callbacks),
|
||||
// this will be overridden in the web startup
|
||||
ServerMessengerResolver.Current = new ServerMessengerResolver(
|
||||
Container,
|
||||
factory => new DatabaseServerMessenger(ApplicationContext, true, new DatabaseServerMessengerOptions()));
|
||||
// fixme - painful, have to take care of lifetime! - we CANNOT ask users to remember!
|
||||
// fixme - same issue with PublishedContentModelFactory and many more, I guess!
|
||||
Container.Register<IServerMessenger>(
|
||||
_ => new DatabaseServerMessenger(ApplicationContext, true, new DatabaseServerMessengerOptions()),
|
||||
new PerContainerLifetime());
|
||||
|
||||
//RepositoryResolver.Current = new RepositoryResolver(
|
||||
// new RepositoryFactory(ApplicationCache));
|
||||
|
||||
@@ -4,6 +4,7 @@ using Umbraco.Core.Cache;
|
||||
using Umbraco.Core.Models.PublishedContent;
|
||||
using Umbraco.Core.PropertyEditors;
|
||||
using Umbraco.Core.Strings;
|
||||
using Umbraco.Core.Sync;
|
||||
using Umbraco.Core._Legacy.PackageActions;
|
||||
|
||||
namespace Umbraco.Core.DependencyInjection
|
||||
@@ -67,6 +68,9 @@ namespace Umbraco.Core.DependencyInjection
|
||||
internal static IPublishedContentModelFactory PublishedContentModelFactory
|
||||
=> Container.GetInstance<IPublishedContentModelFactory>();
|
||||
|
||||
public static IServerMessenger ServerMessenger
|
||||
=> Container.GetInstance<IServerMessenger>();
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
using System;
|
||||
using System.Linq.Expressions;
|
||||
using LightInject;
|
||||
using Umbraco.Core.ObjectResolution;
|
||||
|
||||
namespace Umbraco.Core.Sync
|
||||
{
|
||||
/// <summary>
|
||||
/// Resolves the IServerMessenger object.
|
||||
/// </summary>
|
||||
public sealed class ServerMessengerResolver : ContainerSingleObjectResolver<ServerMessengerResolver, IServerMessenger>
|
||||
{
|
||||
internal ServerMessengerResolver(IServiceContainer container)
|
||||
: base(container)
|
||||
{ }
|
||||
|
||||
internal ServerMessengerResolver(IServiceContainer container, Func<IServiceFactory, IServerMessenger> implementationType)
|
||||
: base(container, implementationType)
|
||||
{ }
|
||||
|
||||
/// <summary>
|
||||
/// Sets the messenger.
|
||||
/// </summary>
|
||||
/// <param name="serverMessenger">The messenger.</param>
|
||||
public void SetServerMessenger(IServerMessenger serverMessenger)
|
||||
{
|
||||
Value = serverMessenger;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the messenger.
|
||||
/// </summary>
|
||||
public IServerMessenger Messenger
|
||||
{
|
||||
get { return Value; }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1248,7 +1248,6 @@
|
||||
<Compile Include="Sync\IServerRegistrar.cs" />
|
||||
<Compile Include="Sync\IServerAddress.cs" />
|
||||
<Compile Include="Sync\MessageType.cs" />
|
||||
<Compile Include="Sync\ServerMessengerResolver.cs" />
|
||||
<Compile Include="Sync\ServerRegistrarResolver.cs" />
|
||||
<Compile Include="Sync\ConfigServerRegistrar.cs" />
|
||||
<Compile Include="Strings\Utf8ToAsciiConverter.cs" />
|
||||
|
||||
@@ -25,12 +25,13 @@ namespace Umbraco.Tests.Cache.DistributedCache
|
||||
var container = new ServiceContainer();
|
||||
container.ConfigureUmbracoCore();
|
||||
|
||||
ServerRegistrarResolver.Current = new ServerRegistrarResolver(
|
||||
new TestServerRegistrar());
|
||||
ServerMessengerResolver.Current = new ServerMessengerResolver(
|
||||
container, factory => new TestServerMessenger());
|
||||
ServerRegistrarResolver.Current = new ServerRegistrarResolver(new TestServerRegistrar());
|
||||
|
||||
container.Register<IServerMessenger>(_ => new TestServerMessenger(), new PerContainerLifetime());
|
||||
|
||||
CacheRefresherCollectionBuilder.Register(container)
|
||||
.Add<TestCacheRefresher>();
|
||||
|
||||
Resolution.Freeze();
|
||||
}
|
||||
|
||||
@@ -38,7 +39,6 @@ namespace Umbraco.Tests.Cache.DistributedCache
|
||||
public void Teardown()
|
||||
{
|
||||
ServerRegistrarResolver.Reset();
|
||||
ServerMessengerResolver.Reset();
|
||||
|
||||
Current.Reset();
|
||||
}
|
||||
@@ -50,7 +50,7 @@ namespace Umbraco.Tests.Cache.DistributedCache
|
||||
{
|
||||
global::Umbraco.Web.Cache.DistributedCache.Instance.Refresh(Guid.Parse("E0F452CB-DCB2-4E84-B5A5-4F01744C5C73"), i);
|
||||
}
|
||||
Assert.AreEqual(10, ((TestServerMessenger)ServerMessengerResolver.Current.Messenger).IntIdsRefreshed.Count);
|
||||
Assert.AreEqual(10, ((TestServerMessenger)Current.ServerMessenger).IntIdsRefreshed.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -63,7 +63,7 @@ namespace Umbraco.Tests.Cache.DistributedCache
|
||||
x => x.Id,
|
||||
new TestObjectWithId{Id = i});
|
||||
}
|
||||
Assert.AreEqual(10, ((TestServerMessenger)ServerMessengerResolver.Current.Messenger).IntIdsRefreshed.Count);
|
||||
Assert.AreEqual(10, ((TestServerMessenger)Current.ServerMessenger).IntIdsRefreshed.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -73,7 +73,7 @@ namespace Umbraco.Tests.Cache.DistributedCache
|
||||
{
|
||||
global::Umbraco.Web.Cache.DistributedCache.Instance.Refresh(Guid.Parse("E0F452CB-DCB2-4E84-B5A5-4F01744C5C73"), Guid.NewGuid());
|
||||
}
|
||||
Assert.AreEqual(11, ((TestServerMessenger)ServerMessengerResolver.Current.Messenger).GuidIdsRefreshed.Count);
|
||||
Assert.AreEqual(11, ((TestServerMessenger)Current.ServerMessenger).GuidIdsRefreshed.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -83,7 +83,7 @@ namespace Umbraco.Tests.Cache.DistributedCache
|
||||
{
|
||||
global::Umbraco.Web.Cache.DistributedCache.Instance.Remove(Guid.Parse("E0F452CB-DCB2-4E84-B5A5-4F01744C5C73"), i);
|
||||
}
|
||||
Assert.AreEqual(12, ((TestServerMessenger)ServerMessengerResolver.Current.Messenger).IntIdsRemoved.Count);
|
||||
Assert.AreEqual(12, ((TestServerMessenger)Current.ServerMessenger).IntIdsRemoved.Count);
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -93,7 +93,7 @@ namespace Umbraco.Tests.Cache.DistributedCache
|
||||
{
|
||||
global::Umbraco.Web.Cache.DistributedCache.Instance.RefreshAll(Guid.Parse("E0F452CB-DCB2-4E84-B5A5-4F01744C5C73"));
|
||||
}
|
||||
Assert.AreEqual(13, ((TestServerMessenger)ServerMessengerResolver.Current.Messenger).CountOfFullRefreshes);
|
||||
Assert.AreEqual(13, ((TestServerMessenger)Current.ServerMessenger).CountOfFullRefreshes);
|
||||
}
|
||||
|
||||
#region internal test classes
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using LightInject;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Core;
|
||||
@@ -52,8 +53,9 @@ namespace Umbraco.Tests.Integration
|
||||
base.ConfigureContainer();
|
||||
|
||||
ServerRegistrarResolver.Current = new ServerRegistrarResolver(new DistributedCacheTests.TestServerRegistrar()); // localhost-only
|
||||
ServerMessengerResolver.Current = new ServerMessengerResolver(Container);
|
||||
Container.Register<IServerMessenger, WebServiceServerMessenger>();
|
||||
|
||||
Container.Register<IServerMessenger, WebServiceServerMessenger>(new PerContainerLifetime());
|
||||
|
||||
CacheRefresherCollectionBuilder.Register(Container)
|
||||
.Add<ContentTypeCacheRefresher>()
|
||||
.Add<ContentCacheRefresher>()
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace Umbraco.Web.Cache
|
||||
{
|
||||
if (refresherGuid == Guid.Empty || instances.Length == 0 || getNumericId == null) return;
|
||||
|
||||
ServerMessengerResolver.Current.Messenger.PerformRefresh(
|
||||
Current.ServerMessenger.PerformRefresh(
|
||||
ServerRegistrarResolver.Current.Registrar.Registrations,
|
||||
GetRefresherById(refresherGuid),
|
||||
getNumericId,
|
||||
@@ -79,7 +79,7 @@ namespace Umbraco.Web.Cache
|
||||
{
|
||||
if (refresherGuid == Guid.Empty || id == default(int)) return;
|
||||
|
||||
ServerMessengerResolver.Current.Messenger.PerformRefresh(
|
||||
Current.ServerMessenger.PerformRefresh(
|
||||
ServerRegistrarResolver.Current.Registrar.Registrations,
|
||||
GetRefresherById(refresherGuid),
|
||||
id);
|
||||
@@ -94,7 +94,7 @@ namespace Umbraco.Web.Cache
|
||||
{
|
||||
if (refresherGuid == Guid.Empty || id == Guid.Empty) return;
|
||||
|
||||
ServerMessengerResolver.Current.Messenger.PerformRefresh(
|
||||
Current.ServerMessenger.PerformRefresh(
|
||||
ServerRegistrarResolver.Current.Registrar.Registrations,
|
||||
GetRefresherById(refresherGuid),
|
||||
id);
|
||||
@@ -106,7 +106,7 @@ namespace Umbraco.Web.Cache
|
||||
{
|
||||
if (refresherGuid == Guid.Empty || payload == null) return;
|
||||
|
||||
ServerMessengerResolver.Current.Messenger.PerformRefresh(
|
||||
Current.ServerMessenger.PerformRefresh(
|
||||
ServerRegistrarResolver.Current.Registrar.Registrations,
|
||||
GetRefresherById(refresherGuid),
|
||||
payload);
|
||||
@@ -118,7 +118,7 @@ namespace Umbraco.Web.Cache
|
||||
{
|
||||
if (refresherGuid == Guid.Empty || payloads == null) return;
|
||||
|
||||
ServerMessengerResolver.Current.Messenger.PerformRefresh(
|
||||
Current.ServerMessenger.PerformRefresh(
|
||||
ServerRegistrarResolver.Current.Registrar.Registrations,
|
||||
GetRefresherById(refresherGuid),
|
||||
payloads.ToArray());
|
||||
@@ -132,7 +132,7 @@ namespace Umbraco.Web.Cache
|
||||
{
|
||||
if (refresherGuid == Guid.Empty || jsonPayload.IsNullOrWhiteSpace()) return;
|
||||
|
||||
ServerMessengerResolver.Current.Messenger.PerformRefresh(
|
||||
Current.ServerMessenger.PerformRefresh(
|
||||
ServerRegistrarResolver.Current.Registrar.Registrations,
|
||||
GetRefresherById(refresherGuid),
|
||||
jsonPayload);
|
||||
@@ -147,7 +147,7 @@ namespace Umbraco.Web.Cache
|
||||
//{
|
||||
// if (refresherId == Guid.Empty || payload == null) return;
|
||||
|
||||
// ServerMessengerResolver.Current.Messenger.Notify(
|
||||
// Current.ServerMessenger.Notify(
|
||||
// ServerRegistrarResolver.Current.Registrar.Registrations,
|
||||
// GetRefresherById(refresherId),
|
||||
// json);
|
||||
@@ -161,7 +161,7 @@ namespace Umbraco.Web.Cache
|
||||
{
|
||||
if (refresherGuid == Guid.Empty) return;
|
||||
|
||||
ServerMessengerResolver.Current.Messenger.PerformRefreshAll(
|
||||
Current.ServerMessenger.PerformRefreshAll(
|
||||
ServerRegistrarResolver.Current.Registrar.Registrations,
|
||||
GetRefresherById(refresherGuid));
|
||||
}
|
||||
@@ -175,7 +175,7 @@ namespace Umbraco.Web.Cache
|
||||
{
|
||||
if (refresherGuid == Guid.Empty || id == default(int)) return;
|
||||
|
||||
ServerMessengerResolver.Current.Messenger.PerformRemove(
|
||||
Current.ServerMessenger.PerformRemove(
|
||||
ServerRegistrarResolver.Current.Registrar.Registrations,
|
||||
GetRefresherById(refresherGuid),
|
||||
id);
|
||||
@@ -193,7 +193,7 @@ namespace Umbraco.Web.Cache
|
||||
/// </remarks>
|
||||
public void Remove<T>(Guid refresherGuid, Func<T, int> getNumericId, params T[] instances)
|
||||
{
|
||||
ServerMessengerResolver.Current.Messenger.PerformRemove(
|
||||
Current.ServerMessenger.PerformRemove(
|
||||
ServerRegistrarResolver.Current.Registrar.Registrations,
|
||||
GetRefresherById(refresherGuid),
|
||||
getNumericId,
|
||||
|
||||
@@ -8,6 +8,7 @@ using Umbraco.Core.Models.PublishedContent;
|
||||
using Umbraco.Core.Persistence.Migrations;
|
||||
using Umbraco.Core.PropertyEditors;
|
||||
using Umbraco.Core.Strings;
|
||||
using Umbraco.Core.Sync;
|
||||
using Umbraco.Core._Legacy.PackageActions;
|
||||
using Umbraco.Web.Editors;
|
||||
using Umbraco.Web.HealthCheck;
|
||||
@@ -221,6 +222,9 @@ namespace Umbraco.Web
|
||||
internal static IPublishedContentModelFactory PublishedContentModelFactory
|
||||
=> Container.GetInstance<IPublishedContentModelFactory>();
|
||||
|
||||
public static IServerMessenger ServerMessenger
|
||||
=> Container.GetInstance<IServerMessenger>();
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -417,7 +417,7 @@ namespace Umbraco.Web
|
||||
if (UmbracoConfig.For.UmbracoSettings().DistributedCall.Enabled)
|
||||
{
|
||||
//set the legacy one by default - this maintains backwards compat
|
||||
ServerMessengerResolver.Current.SetServerMessenger(new BatchedWebServiceServerMessenger(() =>
|
||||
Container.Register<IServerMessenger>(_ => new BatchedWebServiceServerMessenger(() =>
|
||||
{
|
||||
//we should not proceed to change this if the app/database is not configured since there will
|
||||
// be no user, plus we don't need to have server messages sent if this is the case.
|
||||
@@ -436,18 +436,18 @@ namespace Umbraco.Web
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ProfilingLogger.Logger.Error<WebBootManager>("An error occurred trying to set the IServerMessenger during application startup", e);
|
||||
ProfilingLogger.Logger.Error<WebBootManager>("An error occurred trying to set the IServerMessenger during application startup", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
ProfilingLogger.Logger.Warn<WebBootManager>("Could not initialize the DefaultServerMessenger, the application is not configured or the database is not configured");
|
||||
ProfilingLogger.Logger.Warn<WebBootManager>("Could not initialize the DefaultServerMessenger, the application is not configured or the database is not configured");
|
||||
return null;
|
||||
}));
|
||||
}), new PerContainerLifetime());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
ServerMessengerResolver.Current.SetServerMessenger(new BatchedDatabaseServerMessenger(
|
||||
Container.Register<IServerMessenger>(_ => new BatchedDatabaseServerMessenger(
|
||||
ApplicationContext,
|
||||
true,
|
||||
//Default options for web including the required callbacks to build caches
|
||||
@@ -475,7 +475,7 @@ namespace Umbraco.Web
|
||||
// indexes then they can adjust this logic themselves.
|
||||
() => RebuildIndexes(false)
|
||||
}
|
||||
}));
|
||||
}), new PerContainerLifetime());
|
||||
}
|
||||
|
||||
ActionCollectionBuilder.Register(Container)
|
||||
|
||||
Reference in New Issue
Block a user