Let's say I have some content classes like Page, TabGroup, Tab, etc. Certain of those will be implementing my IWidgetContainer interface - it means they will geet an additional field named ContainedItems from the interface and some methods for manipulating this field.
Now I need to reflect the fact that some class implements this interface by rendering out some special custom controls in my ASP.NET MVC Views (like jQuery Add/Remove/Move/Reorder buttons).
For instance, TabGroup will implement IWidgetContainer because it will contain tabs but a tab will not implement it because it won't have the ability to contain anything.
So I have to somehow check in my view, when I render my content objects (The problem is, I use my base class as strong type in my view not concrete classes), whether it implements IWidgetContainer.
How is that possible or have I completely missed something?
To rephrase the question, how do you reflect some special properties of a class (like interface implementation) in the UI in general (not necessarily ASP.NET MVC)?
Here's my code so far:
[DataContract]
public class ContentClass
{
[DataMember]
public string Slug;
[DataMember]
public string Title;
[DataMember]
protected ContentType Type;
}
[DataContract]
public class Group : ContentClass, IWidgetContainer
{
public Group()
{
Type = ContentType.TabGroup;
}
public ContentList ContainedItems
{
get; set;
}
public void AddContent(ContentListItem toAdd)
{
throw new NotImplementedException();
}
public void RemoveContent(ContentListItem toRemove)
{
throw new NotImplementedException();
}
}
[DataContract]
public class GroupElement : ContentClass
{
public GroupElement()
{
Type = ContentType.Tab;
}
}
Interface:
interface IWidgetContainer
{
[DataMember]
ContentList ContainedItems { get; set; }
void AddContent(ContentListItem toAdd);
void RemoveContent(ContentListItem toRemove);
}