Controlling allowed types in a ContentArea using an interface
13.02.2015 13:00:00
Given the way that the AllowedTypesAttribute works, you have to specify each type that you might want inside that ContentArea, no inheritance or interfacing allowed. I came up with a fairly simple workaround for situations where you want to control the allowance on all ContentAreas that have no AllowedTypesAttribute defined in the solution. Mainly to avoid having to enter a lot of text.
Step 1: Create an interface
Create a new interface, preferably somewhere where interfaces like to grow.
public interface IContentAreaContent : IContentData { }
Step 2: Create a configuration class
In the same project as your models. Or modify the below example accordingly.
public static class ModelConfiguration
{
public static readonly Type[] DefaultAllowedContentTypes = Assembly.GetExecutingAssembly()
.GetTypes()
.Where(p => typeof(IContentAreaContent).IsAssignableFrom(p) && !p.IsInterface)
.ToArray();
}
Step 3: Create an EditorDescriptor
This step overrides the ContentAreaEditorDescriptor and specifies all the classes that implement IContentAreaContent for you.
[EditorDescriptorRegistration(TargetType = typeof(ContentArea), EditorDescriptorBehavior = EditorDescriptorBehavior.OverrideDefault)]
public class AllowedTypeContentAreaEditorDescriptor : ContentAreaEditorDescriptor
{
public AllowedTypeContentAreaEditorDescriptor()
{
AllowedTypes = ModelConfiguration.DefaultAllowedContentTypes;
}
}
Kontakt oss her