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