private static ResolveResultBase CreateResult(ResolvedPropertyTypeInfo propertyTypeInfo)
        {
            if (propertyTypeInfo.InterfaceType == typeof(IResolve<>))
            {
                return CreateResult(
                    typeof(ResolveResult<>),
                    propertyTypeInfo.ResolvedType
                );
            }

            if (propertyTypeInfo.InterfaceType == typeof(IResolveSingle<>))
            {
                return CreateResult(
                    typeof(ResolveResultSingle<>),
                    propertyTypeInfo.ResolvedType
                );
            }

            if (propertyTypeInfo.InterfaceType == typeof(IResolveSingleOrDefault<>))
            {
                return CreateResult(
                    typeof(ResolveResultSingleOrDefault<>),
                    propertyTypeInfo.ResolvedType
                );
            }

            // not reached
            throw ResolvedPropertyTypeInfo.InvalidInterfaceType(
                nameof(propertyTypeInfo),
                propertyTypeInfo.InterfaceType
            );
        }
Пример #2
0
        private static ResolveResultBase CreateResult(ResolvedPropertyTypeInfo propertyTypeInfo)
        {
            if (propertyTypeInfo.InterfaceType == typeof(IResolve <>))
            {
                return(CreateResult(
                           typeof(ResolveResult <>),
                           propertyTypeInfo.ResolvedType
                           ));
            }

            if (propertyTypeInfo.InterfaceType == typeof(IResolveSingle <>))
            {
                return(CreateResult(
                           typeof(ResolveResultSingle <>),
                           propertyTypeInfo.ResolvedType
                           ));
            }

            if (propertyTypeInfo.InterfaceType == typeof(IResolveSingleOrDefault <>))
            {
                return(CreateResult(
                           typeof(ResolveResultSingleOrDefault <>),
                           propertyTypeInfo.ResolvedType
                           ));
            }

            // not reached
            throw ResolvedPropertyTypeInfo.InvalidInterfaceType(
                      nameof(propertyTypeInfo),
                      propertyTypeInfo.InterfaceType
                      );
        }
Пример #3
0
        /// <remarks>Mainly for unit tests.</remarks>
        public ResolvedPropertyBinder(Type type)
        {
            if (type == null)
            {
                throw Logger.Fatal.ArgumentNull(nameof(type));
            }

            Properties = new HarshObjectMetadata(type)
                         .ReadableWritableInstanceProperties
                         .Where(p => ResolvedPropertyTypeInfo.IsResolveType(p.PropertyTypeInfo))
                         .ToImmutableArray();
        }
Пример #4
0
        public static Object CreateResult(
            TypeInfo propertyTypeInfo,
            IEnumerable enumerable,
            IResolveBuilder builder,
            IEnumerable <ResolveFailure> failures
            )
        {
            if (propertyTypeInfo == null)
            {
                throw Logger.Fatal.ArgumentNull(nameof(propertyTypeInfo));
            }

            if (enumerable == null)
            {
                throw Logger.Fatal.ArgumentNull(nameof(enumerable));
            }

            if (builder == null)
            {
                throw Logger.Fatal.ArgumentNull(nameof(builder));
            }

            if (failures == null)
            {
                throw Logger.Fatal.ArgumentNull(nameof(failures));
            }

            var property = ResolvedPropertyTypeInfo.Parse(propertyTypeInfo);

            var enumerableTypes =
                GetEnumerableTypes(enumerable.GetType())
                .ToArray();

            if (!enumerableTypes.Contains(property.ResolvedType))
            {
                enumerable = CreateConverter(enumerable, property.ResolvedType);
            }

            var result = CreateResult(property);

            result.ResolveBuilder  = builder;
            result.ResolveFailures = failures;
            result.Results         = enumerable;
            return(result);
        }
Пример #5
0
        public DefaultFromContextProperty(
            PropertyAccessor accessor,
            DefaultFromContextAttribute attribute
            )
        {
            if (accessor == null)
            {
                throw Logger.Fatal.ArgumentNull(nameof(accessor));
            }

            if (attribute == null)
            {
                throw Logger.Fatal.ArgumentNull(nameof(attribute));
            }

            Accessor             = accessor;
            Attribute            = attribute;
            ResolvedPropertyInfo = ResolvedPropertyTypeInfo.TryParse(PropertyTypeInfo);

            ValidateIsNullable();
            ValidateTagTypeIsIDefaultFromContextTag();
            ValidateWithTagNotResolvable();
        }