Пример #1
0
        public static void EnableDebugging(this TypeAdapterConfig config, string sourceCodePath = null)
        {
            if (sourceCodePath == null)
            {
                sourceCodePath = GetDefaultSourceCodePath();
            }

            //initialize on first call
            if (_registeredFilename == null)
            {
                _registeredFilename = new Dictionary <string, int>();
                _assemblyName       = GetAssemblyName();
            }

            config.Compiler = lambda =>
            {
                var filename = lambda.Parameters[0].Type.Name + "-" + lambda.ReturnType.Name;
                var key      = filename;
                lock (_registeredFilename)
                {
                    if (!_registeredFilename.TryGetValue(key, out var num))
                    {
                        _registeredFilename[key] = 0;
                    }
                    else
                    {
                        filename += "-" + num;
                    }
                    _registeredFilename[key]++;
                }
                var path = Path.Combine(sourceCodePath, filename + ".cs");
                using (var injector = new DebugInfoInjectorEx(path))
                {
                    return(injector.Compile(lambda, _assemblyName));
                }
            };
        }
Пример #2
0
 public TypeAdapterSetter(TypeAdapterSettings settings, TypeAdapterConfig parentConfig)
 {
     this.Settings     = settings;
     this.ParentConfig = parentConfig;
 }
Пример #3
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 !);
Пример #4
0
        public static IQueryable <TDestination> ProjectToType <TDestination>(this IQueryable source, TypeAdapterConfig config = null)
        {
            config = config ?? TypeAdapterConfig.GlobalSettings;
            var mockCall   = config.GetProjectionCallExpression(source.ElementType, typeof(TDestination));
            var sourceCall = Expression.Call(mockCall.Method, source.Expression, mockCall.Arguments[1]);

            return(source.Provider.CreateQuery <TDestination>(sourceCall));
        }
Пример #5
0
 public static TypeAdapterBuilder <TSource> BuildAdapter <TSource>(this TSource source, TypeAdapterConfig config)
 {
     return(new TypeAdapterBuilder <TSource>(source, config));
 }
Пример #6
0
 public CompileContext(TypeAdapterConfig config)
 {
     this.Config = config;
 }
 public static void EnableJsonMapping(this TypeAdapterConfig config)
 {
     config.Rules.Add(new JsonAdapter().CreateRule());
 }
Пример #8
0
        /// <summary>
        /// Adapt the source object to an existing destination object.
        /// </summary>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="destination">Destination object to populate.</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, object destination, Type sourceType, Type destinationType, TypeAdapterConfig config)
        {
            dynamic fn = config.GetMapToTargetFunction(sourceType, destinationType);

            return(fn((dynamic)source, (dynamic)destination));
        }
Пример #9
0
 /// <summary>
 /// Returns an instance representation of the adapter, mainly for DI/IOC situations.
 /// </summary>
 /// <param name="config">Configuration</param>
 /// <returns>Instance of the adapter.</returns>
 public static IAdapter GetInstance(TypeAdapterConfig config = null)
 {
     return(new Adapter(config ?? TypeAdapterConfig.GlobalSettings));
 }
Пример #10
0
        /// <summary>
        /// Adapte the source object to an existing destination object.
        /// </summary>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="destination">Destination object to populate.</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, object destination, Type sourceType, Type destinationType, TypeAdapterConfig config = null)
        {
            config = config ?? TypeAdapterConfig.GlobalSettings;
            dynamic fn = config.GetMapToTargetFunction(sourceType, destinationType);

            try
            {
                return(fn((dynamic)source, (dynamic)destination));
            }
            finally
            {
                MapContext.Clear();
            }
        }
Пример #11
0
        /// <summary>
        /// Adapte the source object to the existing destination object.
        /// </summary>
        /// <typeparam name="TSource">Source type.</typeparam>
        /// <typeparam name="TDestination">Destination type.</typeparam>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="destination">The destination object to populate.</param>
        /// <param name="config">Configuration</param>
        /// <returns>Adapted destination type.</returns>
        public static TDestination Adapt <TSource, TDestination>(TSource source, TDestination destination, TypeAdapterConfig config = null)
        {
            config = config ?? TypeAdapterConfig.GlobalSettings;
            var fn = config.GetMapToTargetFunction <TSource, TDestination>();

            try
            {
                return(fn(source, destination));
            }
            finally
            {
                MapContext.Clear();
            }
        }
Пример #12
0
        /// <summary>
        /// Adapt the source object to an existing destination object.
        /// </summary>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="destination">Destination object to populate.</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, object destination, Type sourceType, Type destinationType, TypeAdapterConfig config)
        {
            var del = config.GetMapToTargetFunction(sourceType, destinationType);

            if (sourceType.GetTypeInfo().IsVisible&& destinationType.GetTypeInfo().IsVisible)
            {
                dynamic fn = del;
                return(fn((dynamic)source, (dynamic)destination));
            }
            else
            {
                //NOTE: if type is non-public, we cannot use dynamic
                //DynamicInvoke is slow, but works with non-public
                return(del.DynamicInvoke(source, destination));
            }
        }
Пример #13
0
 public CompileContext(TypeAdapterConfig config)
 {
     Configs.Push(config);
 }
Пример #14
0
 public static void EnableImmutableMapping(this TypeAdapterConfig config)
 {
     config.Rules.Add(new ImmutableAdapter().CreateRule());
 }
Пример #15
0
 public TypeAdapterSetter(TypeAdapterSettings settings, TypeAdapterConfig config)
 {
     this.Settings = settings;
     this.Config   = config;
 }
Пример #16
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)
        {
            dynamic fn = config.GetMapFunction(source.GetType(), typeof(TDestination));

            return((TDestination)fn((dynamic)source));
        }
Пример #17
0
 public Adapter(TypeAdapterConfig config)
 {
     _config = config;
 }
Пример #18
0
        /// <summary>
        /// Adapt the source object to the existing destination object.
        /// </summary>
        /// <typeparam name="TSource">Source type.</typeparam>
        /// <typeparam name="TDestination">Destination type.</typeparam>
        /// <param name="source">Source object to adapt.</param>
        /// <param name="destination">The destination object to populate.</param>
        /// <param name="config">Configuration</param>
        /// <returns>Adapted destination type.</returns>
        public static TDestination Adapt <TSource, TDestination>(this TSource source, TDestination destination, TypeAdapterConfig config)
        {
            var fn = config.GetMapToTargetFunction <TSource, TDestination>();

            return(fn(source, destination));
        }
Пример #19
0
 internal TypeAdapterBuiler(TSource source, TypeAdapterConfig config)
 {
     this.Source = source;
     this.Config = config;
 }
Пример #20
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)
 {
     // ReSharper disable once ConditionIsAlwaysTrueOrFalse
     if (source == null)
     {
         return(default !);