private void SetFieldSlots()
{
//-- Field slot indices and readonly.
foreach (FieldSetting fieldSetting in this.FieldSettings)
{
if (fieldSetting.DataTypes.Length == 0)
continue;
Type[][] slots = fieldSetting.HandlerSlots;
for (int i = 0; i < fieldSetting.Bindings.Count; i++)
{
string propName = fieldSetting.Bindings[i];
Type propertyType = null;
bool readOnly = false;
//-- generic property
RepositoryDataType dataType = fieldSetting.DataTypes[i];
switch (dataType)
{
case RepositoryDataType.String:
case RepositoryDataType.Text:
propertyType = typeof(string);
break;
case RepositoryDataType.Int:
propertyType = typeof(Int32);
break;
case RepositoryDataType.Currency:
propertyType = typeof(decimal);
break;
case RepositoryDataType.DateTime:
propertyType = typeof(DateTime);
break;
case RepositoryDataType.Binary:
propertyType = typeof(BinaryData);
break;
case RepositoryDataType.Reference:
propertyType = typeof(NodeList<Node>);
break;
default:
throw new ContentRegistrationException(String.Concat("Unknown datatype: ", dataType), this.Name, fieldSetting.Name);
}
for (int j = 0; j < slots[i].Length; j++)
{
////-- for your information:
//typeof(Node).IsAssignableFrom(typeof(User)) ==> true
//typeof(User).IsAssignableFrom(typeof(Node)) ==> false
//-- this is the bad code:
//if (propertyType.IsAssignableFrom(slots[i][j]))
//-- this is the good:
try
{
var a = fieldSetting.Name[0] == '#';
var b = fieldSetting.DataTypes.Length == 0;
var x = fieldSetting.HandlerSlotIndices[i];
}
catch
{
throw;
}
if (slots[i][j].IsAssignableFrom(propertyType))
{
fieldSetting.HandlerSlotIndices[i] = j;
fieldSetting.PropertyIsReadOnly = readOnly;
break;
}
}
}
fieldSetting.Initialize();
}
}