private static Expression GetIdentifierOrNull( Type type, Expression parameter, IMemberMapperData mapperData, ICache <TypeKey, Expression> cache) { return(cache.GetOrAdd(TypeKey.ForTypeId(type), key => { var configuredIdentifier = mapperData.MapperContext.UserConfigurations.Identifiers.GetIdentifierOrNullFor(key.Type); if (configuredIdentifier != null) { return configuredIdentifier.ReplaceParameterWith(parameter); } var identifier = GlobalContext.Instance.MemberFinder.GetIdentifierOrNull(key); return identifier?.GetAccess(parameter); })); }
public static Expression GetIdentifierOrNull( this MapperContext context, Expression subject, ICache <TypeKey, Expression> cache = null) { var typeIdsCache = cache ?? context.Cache.CreateScopedWithHashCodes <TypeKey, Expression>(); return(typeIdsCache.GetOrAdd(TypeKey.ForTypeId(subject.Type), key => { var configuredIdentifier = context.UserConfigurations.Identifiers.GetIdentifierOrNullFor(key.Type); if (configuredIdentifier != null) { return configuredIdentifier.ReplaceParameterWith(subject); } var identifier = context.GetIdentifierOrNull(key.Type); return identifier?.GetAccess(subject); })); }