Beispiel #1
0
 public void LoadData()
 {
     AssemblyModels.Include(t => t.Namespaces).Load();
     NamespaceModels.Include(t => t.Types).Load();
     Types.Include(t => t.GenericArguments)
     .Include(t => t.Attributes)
     .Include(t => t.DeclaringType)
     .Include(t => t.BaseType)
     .Include(t => t.ImplementedInterfaces)
     .Include(t => t.Fields)
     .Include(t => t.Methods)
     .Include(t => t.Properties)
     .Include(t => t.Indexers)
     .Include(t => t.Events)
     .Include(t => t.Constructors)
     .Include(t => t.NestedTypes).Load();
     ConstructorModels.Include(t => t.GenericArguments)
     .Include(t => t.Parameters).Load();
     EventModels.Load();
     FieldModels.Include(t => t.TypeModel).Load();
     IndexerModels.Load();
     AttributeModels.Load();
     MethodModels.Include(t => t.GenericArguments)
     .Include(t => t.Parameters).Load();
     ParameterModels.Load();
     PropertyModels.Include(t => t.propertyMethods).Load();
 }
        private static object CreateSMTInstance(MappingModel model)
        {
            var constructorModel = ConstructorModels.FirstOrDefault(cm => cm.MapName.ToLower().Equals(model.Name.ToLower()));

            if (constructorModel == null)
            {
                return(null);
            }

            var definedConstructor = model.To.Class.GetConstructors().FirstOrDefault(ctr => ctr.GetParameters().Length == constructorModel.Params.Count);

            if (definedConstructor == null)
            {
                throw new SMTException(String.Format("No constructor found matching the config file params for this mapping: {0}", model.Name));
            }

            var constParams = definedConstructor.GetParameters();
            var finalParams = new List <object>();

            foreach (var param in constParams)
            {
                var smtParam = constructorModel.Params.FirstOrDefault(p => p.Name.Equals(param.Name));

                if (smtParam == null && !param.HasDefaultValue)
                {
                    throw new SMTException(String.Format("Constructor {0} has no param named {1} or has a default value", definedConstructor.Name, param.Name));
                }

                var    shouldUserDefaultValue = smtParam == null && param.HasDefaultValue;
                var    equalTypes             = param.ParameterType.Equals(typeof(string));
                object paramValue             = smtParam == null && param.HasDefaultValue ?
                                                param.DefaultValue :
                                                equalTypes ?
                                                smtParam.Value :
                                                TypeDescriptor.GetConverter(param.ParameterType).ConvertFrom(smtParam.Value);

                finalParams.Add(paramValue);
            }

            return(definedConstructor.Invoke(finalParams.ToArray()));
        }