AI OnAI Off
Found a way by implementing a custom IMetaDataProvider
Seems to work fine.
public class CustomEpiserverMetadataProvider : IMetadataProvider
{
private IMetadataProvider _defaultMetadataProvider;
public CustomEpiserverMetadataProvider (IMetadataProvider metadataProvider)
{
_defaultMetadataProvider = metadataProvider;
}
public ExtendedMetadata CreateMetadata(IEnumerable attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
return _defaultMetadataProvider.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
}
public IEnumerable GetMetadataForProperties(object container, Type containerType)
{
var metadataForProperties = _defaultMetadataProvider.GetMetadataForProperties(container, containerType).ToList();
if (container is PromotionData)
{
foreach (var propertyMetadata in metadataForProperties)
{
if (propertyMetadata.PropertyName == nameof(PromotionData.Description))
{
propertyMetadata.UIHint = "my-custom-ui-hint"; // Replace the default UIHint "textarea" with our custom editor
}
}
}
return metadataForProperties;
}
}
Registering it using a InitializationModule
[InitializableModule]
[ModuleDependency(typeof(InitializableModule))]
public class CustomEpiserverMetadataProviderRegistration : IInitializableModule
{
public void Initialize(InitializationEngine context)
{
var registry = context.Locate.Advanced.GetInstance();
var metadataHandlers = registry.GetMetadataHandlers(typeof(ContentData));
IMetadataProvider defaultMetadataProvider = (IMetadataProvider)metadataHandlers.FirstOrDefault(i => i is IMetadataProvider);
registry.RegisterMetadataHandler(typeof(ContentData),new CustomEpiserverMetadataProvider(defaultMetadataProvider));
}
public void Preload(string[] parameters) { }
public void Uninitialize(InitializationEngine context) { }
}
Is it possible to switch the editor for
PromotionData.Description
to a custom one instead of "textarea"?I have tried this to see if I can modify the metadata, but no success.
Decompiled PromotionData class