Exemplo n.º 1
0
        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);
            }));
        }