V15: Refresh IPublishedContentTypeFactory when data types change (#17180)
* Refresh IPublishedContentTypeFactory when data types change * Add tests
This commit is contained in:
@@ -14,6 +14,7 @@ public sealed class ContentTypeCacheRefresher : PayloadCacheRefresherBase<Conten
|
||||
{
|
||||
private readonly IContentTypeCommonRepository _contentTypeCommonRepository;
|
||||
private readonly IPublishedModelFactory _publishedModelFactory;
|
||||
private readonly IPublishedContentTypeFactory _publishedContentTypeFactory;
|
||||
private readonly IIdKeyMap _idKeyMap;
|
||||
|
||||
public ContentTypeCacheRefresher(
|
||||
@@ -23,12 +24,14 @@ public sealed class ContentTypeCacheRefresher : PayloadCacheRefresherBase<Conten
|
||||
IContentTypeCommonRepository contentTypeCommonRepository,
|
||||
IEventAggregator eventAggregator,
|
||||
ICacheRefresherNotificationFactory factory,
|
||||
IPublishedModelFactory publishedModelFactory)
|
||||
IPublishedModelFactory publishedModelFactory,
|
||||
IPublishedContentTypeFactory publishedContentTypeFactory)
|
||||
: base(appCaches, serializer, eventAggregator, factory)
|
||||
{
|
||||
_idKeyMap = idKeyMap;
|
||||
_contentTypeCommonRepository = contentTypeCommonRepository;
|
||||
_publishedModelFactory = publishedModelFactory;
|
||||
_publishedContentTypeFactory = publishedContentTypeFactory;
|
||||
}
|
||||
|
||||
#region Json
|
||||
@@ -114,6 +117,8 @@ public sealed class ContentTypeCacheRefresher : PayloadCacheRefresherBase<Conten
|
||||
// TODO: We need to clear the HybridCache of any content using the ContentType, but NOT the database cache here, and this should be done within the "WithSafeLiveFactoryReset" to ensure that the factory is locked in the meantime.
|
||||
_publishedModelFactory.WithSafeLiveFactoryReset(() => { });
|
||||
|
||||
_publishedContentTypeFactory.NotifyDataTypeChanges();
|
||||
|
||||
// now we can trigger the event
|
||||
base.Refresh(payloads);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ public sealed class DataTypeCacheRefresher : PayloadCacheRefresherBase<DataTypeC
|
||||
{
|
||||
private readonly IIdKeyMap _idKeyMap;
|
||||
private readonly IPublishedModelFactory _publishedModelFactory;
|
||||
private readonly IPublishedContentTypeFactory _publishedContentTypeFactory;
|
||||
|
||||
public DataTypeCacheRefresher(
|
||||
AppCaches appCaches,
|
||||
@@ -20,11 +21,13 @@ public sealed class DataTypeCacheRefresher : PayloadCacheRefresherBase<DataTypeC
|
||||
IIdKeyMap idKeyMap,
|
||||
IEventAggregator eventAggregator,
|
||||
ICacheRefresherNotificationFactory factory,
|
||||
IPublishedModelFactory publishedModelFactory)
|
||||
IPublishedModelFactory publishedModelFactory,
|
||||
IPublishedContentTypeFactory publishedContentTypeFactory)
|
||||
: base(appCaches, serializer, eventAggregator, factory)
|
||||
{
|
||||
_idKeyMap = idKeyMap;
|
||||
_publishedModelFactory = publishedModelFactory;
|
||||
_publishedContentTypeFactory = publishedContentTypeFactory;
|
||||
}
|
||||
|
||||
#region Json
|
||||
@@ -86,6 +89,9 @@ public sealed class DataTypeCacheRefresher : PayloadCacheRefresherBase<DataTypeC
|
||||
// TODO: We need to clear the HybridCache of any content using the ContentType, but NOT the database cache here, and this should be done within the "WithSafeLiveFactoryReset" to ensure that the factory is locked in the meantime.
|
||||
_publishedModelFactory.WithSafeLiveFactoryReset(() => { });
|
||||
|
||||
var changedIds = payloads.Select(x => x.Id).ToArray();
|
||||
_publishedContentTypeFactory.NotifyDataTypeChanges(changedIds);
|
||||
|
||||
base.Refresh(payloads);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user