Register no-op implementation of IMemberPartialViewCacheInvalidator in headless setups (#19666)

* Register no-op implementation of IMemberPartialViewCacheInvalidator in headless setups.

* Tidied usings.
# Conflicts:
#	src/Umbraco.Core/DependencyInjection/UmbracoBuilder.cs
This commit is contained in:
Andy Butland
2025-07-08 15:53:37 +02:00
parent 118b26a8b9
commit 9bd3076abf
3 changed files with 17 additions and 2 deletions

View File

@@ -0,0 +1,9 @@
namespace Umbraco.Cms.Core.Cache.PartialViewCacheInvalidators;
internal class NoopMemberPartialViewCacheInvalidator : IMemberPartialViewCacheInvalidator
{
public void ClearPartialViewCacheItems(IEnumerable<int> memberIds)
{
// No operation performed, this is a no-op implementation.
}
}

View File

@@ -8,11 +8,13 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Cache.PartialViewCacheInvalidators;
using Umbraco.Cms.Core.Composing;
using Umbraco.Cms.Core.Configuration;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Diagnostics;
using Umbraco.Cms.Core.Dictionary;
using Umbraco.Cms.Core.DynamicRoot;
using Umbraco.Cms.Core.Editors;
using Umbraco.Cms.Core.Events;
using Umbraco.Cms.Core.Features;
@@ -32,7 +34,6 @@ using Umbraco.Cms.Core.Scoping;
using Umbraco.Cms.Core.Security;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Services.ContentTypeEditing;
using Umbraco.Cms.Core.DynamicRoot;
using Umbraco.Cms.Core.Preview;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.PublishedCache.Internal;
@@ -389,6 +390,11 @@ namespace Umbraco.Cms.Core.DependencyInjection
Services.AddUnique<IDataTypeConfigurationCache, DataTypeConfigurationCache>();
Services.AddNotificationHandler<DataTypeCacheRefresherNotification, DataTypeConfigurationCacheRefresher>();
// Partial view cache invalidators (no-op, shipped implementation is added in Umbraco.Web.Website, but we
// need this to ensure we have a service registered for this interface even in headless setups).
// See: https://github.com/umbraco/Umbraco-CMS/issues/19661
Services.AddUnique<IMemberPartialViewCacheInvalidator, NoopMemberPartialViewCacheInvalidator>();
// Two factor providers
Services.AddUnique<ITwoFactorLoginService, TwoFactorLoginService>();
Services.AddUnique<IUserTwoFactorLoginService, UserTwoFactorLoginService>();

View File

@@ -32,7 +32,7 @@ public class MemberPartialViewCacheInvalidator : IMemberPartialViewCacheInvalida
_appCaches.RuntimeCache.ClearByRegex($"{CoreCacheHelperExtensions.PartialViewCacheKey}.*-m{memberId}-*");
}
// since it is possible to add a cache item linked to members without a member logged in, we should always clear these items.
// Since it is possible to add a cache item linked to members without a member logged in, we should always clear these items.
_appCaches.RuntimeCache.ClearByRegex($"{CoreCacheHelperExtensions.PartialViewCacheKey}.*-m-*");
}
}