protected virtual void WriteProperty(string propertyName, object value)
{
Node contentHandler = this.Content.ContentHandler;
var dynamicHandler = contentHandler as ISupportsDynamicFields;
if (dynamicHandler != null)
{
dynamicHandler.SetProperty(propertyName, value);
return;
}
var genericHandler = contentHandler as GenericContent;
if (genericHandler != null)
{
genericHandler.SetProperty(propertyName, value);
return;
}
var runtimeNode = contentHandler as Content.RuntimeContentHandler;
if (runtimeNode != null)
{
runtimeNode.SetProperty(propertyName, value);
return;
}
//-- with reflection:
Type type = contentHandler.GetType();
PropertyInfo prop = type.GetProperty(propertyName);
if (prop == null) // it can be null when property is ContentListProperty?
throw new InvalidOperationException(String.Concat("Property not found: ", propertyName, " (ContentType: ", this.Content.ContentType.Name, ")."));
MethodInfo setter = prop.GetSetMethod();
if (setter == null) // it can be null when property is ContentListProperty?
throw new InvalidOperationException(String.Concat("Property is not writeable: ", propertyName, " (ContentType: ", this.Content.ContentType.Name, ")."));
setter.Invoke(contentHandler, new object[] { value });
}