Exemple #1
0
        public object ResolveInstancePropertyCustom(PropertyInfo propertyInfo, object key, TContext context, T instance)
        {
            PropertyOptions <TContext, T> options;

            if (!PropertyOptions.TryGetValue(propertyInfo, out options))
            {
                return(null);
            }
            ICollection <Func <TContext, T, object> > resolvers;

            if (!options.InstancePropertyCustomResolvers.TryGetValue(key, out resolvers) || !resolvers.Any())
            {
                return(null);
            }

            var firstResolver = resolvers.First();

            if (!resolvers.Skip(1).Any())
            {
                return(firstResolver(context, instance));
            }
            Func <object, object, object> reducer = null;

            if (!InstanceCustomResolverReducers.TryGetValue(key, out reducer))
            {
                reducer = DefaultReducer;
            }
            return(resolvers.Skip(1).Aggregate(firstResolver(context, instance), (resolved, resolver) => reducer(resolved, resolver(context, instance))));
        }
Exemple #2
0
        public object ResolveInstanceCustom(TContext context, T instance, object key)
        {
            ICollection <Func <TContext, T, object> > resolvers = null;

            if (!InstanceCustomResolvers.TryGetValue(key, out resolvers) || !resolvers.Any())
            {
                return(null);
            }
            var firstResolver = resolvers.First();

            if (!resolvers.Skip(1).Any())
            {
                return(firstResolver(context, instance));
            }
            Func <object, object, object> reducer = null;

            if (!InstanceCustomResolverReducers.TryGetValue(key, out reducer))
            {
                reducer = DefaultReducer;
            }
            return(resolvers.Skip(1).Aggregate(firstResolver(context, instance), (expression, resolver) => reducer(expression, resolver(context, instance))));
        }