예제 #1
0
파일: Adapter.cs 프로젝트: xcolon/Mapster
        public TDestination Adapt <TDestination>(object source)
        {
            dynamic fn = _config.GetMapFunction(source.GetType(), typeof(TDestination));

            try
            {
                return(fn((dynamic)source));
            }
            finally
            {
                MapContext.Clear();
            }
        }
예제 #2
0
        /// <summary>
        /// Adapt the source object to the destination type.
        /// </summary>
        /// <typeparam name="TDestination">Destination type.</typeparam>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="config">Configuration</param>
        /// <returns>Adapted destination type.</returns>
        public static TDestination Adapt <TDestination>(this object source, TypeAdapterConfig config)
        {
            if (source == null)
            {
                return(default(TDestination));
            }
            dynamic fn = config.GetMapFunction(source.GetType(), typeof(TDestination));

            return((TDestination)fn((dynamic)source));
        }
예제 #3
0
        public TypeAdapterConfig Clone()
        {
            if (_cloneConfig == null)
            {
                _cloneConfig = new TypeAdapterConfig();
                _cloneConfig.Default.Settings.PreserveReference = true;
            }
            var fn = _cloneConfig.GetMapFunction <TypeAdapterConfig, TypeAdapterConfig>();

            return(fn(this));
        }
예제 #4
0
        public TypeAdapterConfig Clone()
        {
            if (_cloneConfig == null)
            {
                _cloneConfig = new TypeAdapterConfig();
                _cloneConfig.Default.Settings.PreserveReference = true;
                _cloneConfig.ForType <TypeAdapterSettings, TypeAdapterSettings>()
                .MapWith(src => src.Clone(), true);
            }
            var fn = _cloneConfig.GetMapFunction <TypeAdapterConfig, TypeAdapterConfig>();

            return(fn(this));
        }
예제 #5
0
        /// <summary>
        /// Adapte the source object to the destination type.
        /// </summary>
        /// <typeparam name="TSource">Source type.</typeparam>
        /// <typeparam name="TDestination">Destination type.</typeparam>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="config">Configuration</param>
        /// <returns>Adapted destination type.</returns>
        public static TDestination Adapt <TSource, TDestination>(TSource source, TypeAdapterConfig config)
        {
            var fn = config.GetMapFunction <TSource, TDestination>();

            try
            {
                return(fn(source));
            }
            finally
            {
                MapContext.Clear();
            }
        }
예제 #6
0
        /// <summary>
        /// Adapte the source object to the destination type.
        /// </summary>
        /// <typeparam name="TDestination">Destination type.</typeparam>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="config">Configuration</param>
        /// <returns>Adapted destination type.</returns>
        public static TDestination Adapt <TDestination>(object source, TypeAdapterConfig config = null)
        {
            config = config ?? TypeAdapterConfig.GlobalSettings;
            dynamic fn = config.GetMapFunction(source.GetType(), typeof(TDestination));

            try
            {
                return(fn((dynamic)source));
            }
            finally
            {
                MapContext.Clear();
            }
        }
예제 #7
0
        /// <summary>
        /// Adapte the source object to the destination type.
        /// </summary>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="sourceType">The type of the source object.</param>
        /// <param name="destinationType">The type of the destination object.</param>
        /// <param name="config">Configuration</param>
        /// <returns>Adapted destination type.</returns>
        public static object Adapt(object source, Type sourceType, Type destinationType, TypeAdapterConfig config = null)
        {
            config = config ?? TypeAdapterConfig.GlobalSettings;
            dynamic fn = config.GetMapFunction(sourceType, destinationType);

            try
            {
                return(fn((dynamic)source));
            }
            finally
            {
                MapContext.Clear();
            }
        }
예제 #8
0
        /// <summary>
        /// Adapt the source object to the destination type.
        /// </summary>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="sourceType">The type of the source object.</param>
        /// <param name="destinationType">The type of the destination object.</param>
        /// <param name="config">Configuration</param>
        /// <returns>Adapted destination type.</returns>
        public static object Adapt(this object source, Type sourceType, Type destinationType, TypeAdapterConfig config)
        {
            var del = config.GetMapFunction(sourceType, destinationType);

            if (sourceType.GetTypeInfo().IsVisible&& destinationType.GetTypeInfo().IsVisible)
            {
                dynamic fn = del;
                return(fn((dynamic)source));
            }
            else
            {
                //NOTE: if type is non-public, we cannot use dynamic
                //DynamicInvoke is slow, but works with non-public
                return(del.DynamicInvoke(source));
            }
        }
예제 #9
0
        public TDestination Adapt <TDestination>(object source)
        {
            dynamic fn = _config.GetMapFunction(source.GetType(), typeof(TDestination));

            return((TDestination)fn((dynamic)source));
        }
예제 #10
0
        /// <summary>
        /// Adapt the source object to the destination type.
        /// </summary>
        /// <typeparam name="TSource">Source type.</typeparam>
        /// <typeparam name="TDestination">Destination type.</typeparam>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="config">Configuration</param>
        /// <returns>Adapted destination type.</returns>
        public static TDestination Adapt <TSource, TDestination>(this TSource source, TypeAdapterConfig config)
        {
            var fn = config.GetMapFunction <TSource, TDestination>();

            return(fn(source));
        }
예제 #11
0
        /// <summary>
        /// Adapt the source object to the destination type.
        /// </summary>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="sourceType">The type of the source object.</param>
        /// <param name="destinationType">The type of the destination object.</param>
        /// <param name="config">Configuration</param>
        /// <returns>Adapted destination type.</returns>
        public static object Adapt(this object source, Type sourceType, Type destinationType, TypeAdapterConfig config)
        {
            dynamic fn = config.GetMapFunction(sourceType, destinationType);

            return(fn((dynamic)source));
        }
예제 #12
0
        public TDestination Adapt <TSource, TDestination>(TSource source)
        {
            var fn = _config.GetMapFunction <TSource, TDestination>();

            return(fn(source));
        }