private ConstructorDescriptor ActivatorConstructorDescriptor()
        {
            var _constructorInfos   = DescriptorType.GetConstructors();
            var _resolveConstructor = (ConstructorInfo)null;

            foreach (var _constructorInfo in _constructorInfos)
            {
                if (Attribute.IsDefined(_constructorInfo, typeof(ResolveConstructorAttribute)))
                {
                    if (_constructorInfo.IsStatic)
                    {
                        throw new ResolveResourceException(string.Format(RESOLVECONST_MUSTBE_INSTANCE, DescriptorType.FullName), DescriptorType);
                    }
                    if (_resolveConstructor != null)
                    {
                        throw new ResolveResourceException(string.Format(RESOLVECONST_ONLYONCE, DescriptorType.FullName), DescriptorType);
                    }
                    if (DescriptorType.IsAbstract)
                    {
                        throw new ResolveResourceException(string.Format(RESOLVECONST_CANNOTBE_ABSTRACT, DescriptorType.FullName), DescriptorType);
                    }

                    _resolveConstructor = _constructorInfo;
                }
            }

            // else we try to get a public and parameter-less constructor
            if (_resolveConstructor == null)
            {
                _resolveConstructor = DescriptorType.GetConstructor(BindingFlags.Public | BindingFlags.Instance, null, EMPTY_PARAMETERS, null);
                if (_resolveConstructor == null)
                {
                    _resolveConstructor = DescriptorType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, EMPTY_PARAMETERS, null);
                }
                if (_resolveConstructor == null)
                {
                    throw new ResolveResourceException(string.Format(BUILD_MUSTHAVE_DEFAULTCONST, DescriptorType.FullName), DescriptorType);
                }
            }

            var _constructor = new ConstructorDescriptor();

            _constructor.Constructor = _resolveConstructor;

            var _parameters = _resolveConstructor.GetParameters();

            if (_parameters.Length == 0)
            {
                _constructor.ConstructorDelegate  = TypeActivator.CreateConstructorDelegate(_resolveConstructor);
                _constructor.ParameterDescriptors = Enumerable.Empty <ParameterDescriptor>();
            }
            else
            {
                _constructor.ConstructorParameterDelegate = TypeActivator.CreateConstructorParametersDelegate(_resolveConstructor);
                _constructor.ParameterDescriptors         = ResolveConstructorParametersDescriptor(_parameters);
            }
            return(_constructor);
        }
        public TypeDescriptor(Type type)
        {
            Guard.ArgumentNotNull(type, "type");

            _profileType           = type;
            _constructorDescriptor = ActivatorConstructorDescriptor();
            _fieldDescriptors      = ResolveFieldsDescriptor();
            _propertyDescriptors   = ResolvePropertiesDescriptor();
        }
Ejemplo n.º 3
0
 public ComplexObjectActivatorCreator(ConstructorDescriptor constructorDescriptor)
 {
     this.ConstructorDescriptor        = constructorDescriptor;
     this.ConstructorParameters        = new Dictionary <ParameterInfo, int>();
     this.ConstructorComplexParameters = new Dictionary <ParameterInfo, IObjectActivatorCreator>();
     this.PrimitiveMembers             = new Dictionary <MemberInfo, int>();
     this.ComplexMembers    = new Dictionary <MemberInfo, IObjectActivatorCreator>();
     this.CollectionMembers = new Dictionary <MemberInfo, IObjectActivatorCreator>();
 }
Ejemplo n.º 4
0
 public ComplexObjectModel(ConstructorDescriptor constructorDescriptor)
 {
     this.ObjectType                     = constructorDescriptor.ConstructorInfo.DeclaringType;
     this.ConstructorDescriptor          = constructorDescriptor;
     this.PrimitiveConstructorParameters = new Dictionary <ParameterInfo, DbExpression>();
     this.ComplexConstructorParameters   = new Dictionary <ParameterInfo, ComplexObjectModel>();
     this.PrimitiveMembers               = new Dictionary <MemberInfo, DbExpression>();
     this.ComplexMembers                 = new Dictionary <MemberInfo, ComplexObjectModel>();
     this.CollectionMembers              = new Dictionary <MemberInfo, CollectionObjectModel>();
 }
Ejemplo n.º 5
0
        static ComplexObjectActivator CreateObjectActivator(Type type, IDataReader reader)
        {
            ConstructorInfo constructor = type.GetConstructor(Type.EmptyTypes);

            if (constructor == null)
            {
                throw new ArgumentException(string.Format("The type of '{0}' does't define a none parameter constructor.", type.FullName));
            }

            ConstructorDescriptor constructorDescriptor = ConstructorDescriptor.GetInstance(constructor);
            ObjectMemberMapper    mapper          = constructorDescriptor.GetEntityMemberMapper();
            InstanceCreator       instanceCreator = constructorDescriptor.GetInstanceCreator();
            List <IMemberBinder>  memberBinders   = PrepareMemberBinders(type, reader, mapper);

            ComplexObjectActivator objectActivator = new ComplexObjectActivator(instanceCreator, new List <IObjectActivator>(), memberBinders, null);

            objectActivator.Prepare(reader);

            return(objectActivator);
        }
 public ConstructorAndArgs(ConstructorDescriptor constructor, IReadOnlyList <BoundValue>?boundValues, bool nonDefaultsUsed)
 {
     Constructor     = constructor;
     BoundValues     = boundValues;
     NonDefaultsUsed = nonDefaultsUsed;
 }
Ejemplo n.º 7
0
 public ComplexObjectModel(ConstructorInfo constructor)
     : this(ConstructorDescriptor.GetInstance(constructor))
 {
 }