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)))); }
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)))); }