/// <summary> Create instance from an xml definition</summary> /// <param name="modelDefinitionManager">The owner of the future ModelType</param> /// <param name="definition">The xml defintion</param> public static ModelType CreateInstance(IModelDefinitionManager modelDefinitionManager, XmlModelType definition) { ModelType ret = null; if (definition != null) { ret = new ModelType(); ret.Parent = modelDefinitionManager; ret.PropertiesByName = new Dictionary <string, IModelProperty>(); ret.LinkPropertiesByName = new Dictionary <string, ModelLinkProperty>(); try { if (string.IsNullOrEmpty(definition.Name)) { throw new EtkException("'Name' is mandatory"); } ret.Name = definition.Name.EmptyIfNull().Trim(); ret.Description = definition.Description; string typeName = definition.Type.EmptyIfNull().Trim(); if (string.IsNullOrEmpty(typeName)) { throw new Exception("'Type' cannot be null or emtpy"); } // if (!string.IsNullOrEmpty(typeName)) { ret.UnderlyingType = TypeHelpers.GetType(typeName); if (ret.UnderlyingType == null) { throw new Exception($"Cannot retrieve Underlying type '{typeName}'"); } ret.RetrieveProperties(ret.UnderlyingType, definition.PropertiesToIgnore); } ret.OverridePropertiesFromXml(definition.Properties); ret.RetrieveLinkPropertiesFromXml(definition.LinkProperties); ret.RetrieveDefaultViewsFromXml(definition.Views); } catch (Exception ex) { throw new EtkException($"Cannot create 'ModelType' '{definition.Name.EmptyIfNull()}': {ex.Message}"); } } return(ret); }
public void ResolveDependencies(IModelDefinitionManager modelDefinition) { if (ModelType != null) { return; } ModelType = modelDefinition.GetModelType(Name); if (ModelType == null) { ModelType = Etk.ModelManagement.ModelType.CreateInstance(modelDefinition, BindingDefinition.BindingType); if (ModelType == null) { throw new Exception($"Cannot retrieve Model type for ModelProperty '{Name}'"); } modelDefinition.AddModelType(ModelType); } }
/// <summary>Create a model type from a given Type </summary> /// <param name="modelDefinitionManager"></param> /// <param name="type"></param> /// <returns></returns> public static ModelType CreateInstance(IModelDefinitionManager modelDefinitionManager, Type type) { ModelType ret = null; if (type != null) { ret = new ModelType(); ret.Parent = modelDefinitionManager; ret.PropertiesByName = new Dictionary <string, IModelProperty>(); try { ret.Name = type.Name; ret.Description = type.Name; ret.UnderlyingType = type; ret.RetrieveProperties(ret.UnderlyingType, null); } catch (Exception ex) { throw new EtkException($"Cannot create 'ModelType' '{type.Name}': {ex.Message}"); } } return(ret); }