Resvolution - ServerMessengerResolver

This commit is contained in:
Stephan
2016-08-23 11:17:08 +02:00
parent d5dd17746d
commit 9782fc7083
9 changed files with 43 additions and 70 deletions

View File

@@ -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));

View File

@@ -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
}
}

View File

@@ -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; }
}
}
}

View File

@@ -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" />

View File

@@ -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

View File

@@ -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>()

View File

@@ -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,

View File

@@ -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
}
}

View File

@@ -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)