Esempio n. 1
0
        private object GetMapMethod(TypePair key, Func <CompiledDelegate, object> propertyAccessor)
        {
            CompiledDelegate @delegate = null;

            DelegateCache.TryGetValue(key, out @delegate);
            var mapMethod = propertyAccessor(@delegate);

            return(mapMethod);
        }
        /// <summary>
        /// Generic method to find the specified type and cache the result
        /// </summary>
        /// <param name="type">The type</param>
        /// <param name="cacheResult">Whether to cache the result</param>
        /// <param name="specificAssemblies">Specific assemblies to search within</param>
        /// <returns>The <see cref="IEnumerable{Type}"/></returns>
        public static IEnumerable <Type> ResolveTypes(Type type, bool cacheResult = true, IEnumerable <Assembly> specificAssemblies = null)
        {
            MethodBaseCacheItem key = GetMethodCacheKey(type);

            if (!DelegateCache.TryGetValue(key, out var f))
            {
                f = CreateGenericResolveMethod(ResolveMethod.MakeGenericMethod(type));
                DelegateCache[key] = f;
            }

            return(((Func <bool, IEnumerable <Assembly>, IEnumerable <Type> >)f)(cacheResult, specificAssemblies));
        }
Esempio n. 3
0
        /// <summary>
        /// Returns an empty <see cref="IEnumerable{T}"/> that has the specified type argument.
        /// </summary>
        /// <param name="type">
        /// The <see cref="Type"/> to assign to the type parameter of the returned
        /// generic <see cref="IEnumerable{T}"/>.
        /// </param>
        /// <returns>
        /// The <see cref="object"/> representing the empty enumerable.
        /// </returns>
        public static object Empty(Type type)
        {
            MethodBaseCacheItem key = GetMethodCacheKey(type);

            if (!DelegateCache.TryGetValue(key, out var f))
            {
                f = StaticMethod <object>(EmptyMethod.MakeGenericMethod(type));
                DelegateCache[key] = f;
            }

            return(((Func <object, object>)f)(type));
        }
Esempio n. 4
0
        /// <summary>
        /// Casts the elements of the given <see cref="IEnumerable"/> to the specified type.
        /// </summary>
        /// <param name="type">The <see cref="Type"/> to cast to.</param>
        /// <param name="value">
        /// The <see cref="IEnumerable"/> to cast the items of.
        /// </param>
        /// <returns>
        /// The <see cref="object"/> representing the cast enumerable.
        /// </returns>
        public static object Cast(Type type, IEnumerable value)
        {
            MethodBaseCacheItem key = GetMethodCacheKey(type);

            if (!DelegateCache.TryGetValue(key, out var f))
            {
                f = StaticMethodSingleParameter <object>(CastMethod.MakeGenericMethod(type));
                DelegateCache[key] = f;
            }

            return(((Func <object, object>)f)(value));
        }
Esempio n. 5
0
        public SingleMapper <TSrc, TDest> GetSingleMapper <TSrc, TDest>()
        {
            CompiledDelegate @delegate = null;

            var key = new TypePair(typeof(TSrc), typeof(TDest));

            DelegateCache.TryGetValue(key, out @delegate);

            var mapMethod = @delegate?.SingleTyped as Func <TSrc, TDest, TDest>;

            if (mapMethod == null)
            {
                throw new HappyMapperException(ErrorMessages.MissingMapping(key.SourceType, key.DestinationType));
            }

            var mapper = new SingleMapper <TSrc, TDest>(mapMethod);

            return(mapper);
        }