예제 #1
0
        // ctor.
        public OrmProperty(MemberInfo memberInfo)
        {
            Debug.Assert(memberInfo != null);

            PropertyName = memberInfo.Name;
            MemberType   = memberInfo.GetMemberType();

            var attribute = memberInfo.GetCustomAttribute <TypeConverterAttribute>();

            if (attribute != null)
            {
                if (Type.GetType(attribute.ConverterTypeName) is Type converterType)
                {
                    TypeConverter = StaticCache.TypeConverters.GetOrAdd(converterType, ConverterValueFactory);
                }
                else
                {
                    throw new MicroOrmException($"Unable to resolve converter type {attribute.ConverterTypeName}");
                }
            }

            if (DynamicReflectionDelegateFactory.CreateSet <object>(memberInfo) is { } setValueDelegate)
            {
                SetValueHandler = new SetValueDelegate(setValueDelegate);
            }

            IsNonNullable = NonNullableConvention.IsNonNullableReferenceType(memberInfo);
        }
예제 #2
0
        ///// <summary>
        ///// Конструктор для анонимного типа.
        ///// </summary>
        //public ConstructorArgument(int parameterIndex, PropertyInfo property)
        //{
        //    ParameterIndex = parameterIndex;
        //    ParameterName = property.Name;
        //    ParameterType = property.PropertyType;

        //    IsNonNullable = NonNullableConvention.IsNonNullableReferenceType(property);
        //}

        public ConstructorArgument(ParameterInfo parameterInfo)
        {
            ParameterIndex = parameterInfo.Position;
            ParameterName  = parameterInfo.Name !;
            ParameterType  = parameterInfo.ParameterType;

            IsNonNullable = NonNullableConvention.IsNonNullableReferenceType(parameterInfo);

            if (parameterInfo.GetCustomAttribute <TypeConverterAttribute>() is TypeConverterAttribute typeConverter)
            {
                if (Type.GetType(typeConverter.ConverterTypeName) is Type converterType)
                {
                    TypeConverter = StaticCache.TypeConverters.GetOrAdd(converterType, ConverterValueFactory);
                }
                else
                {
                    throw new MicroOrmException($"Unknown converter tyoe '{typeConverter.ConverterTypeName}'");
                }
            }
        }