示例#1
0
        /// <summary>
        /// Adds the configurator instance.
        /// </summary>
        /// <typeparam name="TFrom">The type of from.</typeparam>
        /// <typeparam name="TTo">The type of to.</typeparam>
        /// <param name="configurator">The configurator.</param>
        public virtual void AddConfiguration <TFrom, TTo>(IMappingConfigurator configurator)
        {
            AssertCore.IsNotNull(configurator, "configurator");

            MappingConfigurations.Add(new Tuple <Type, Type, IMappingConfigurator>(typeof(TFrom), typeof(TTo),
                                                                                   configurator));
        }
示例#2
0
        private ObjectsMapperBaseImpl BuildObjectsMapper(
            string MapperTypeName,
            Type from,
            Type to,
            IMappingConfigurator mappingConfigurator)
        {
            TypeBuilder typeBuilder = DynamicAssemblyManager.DefineMapperType(MapperTypeName);

            CreateTargetInstanceBuilder.BuildCreateTargetInstanceMethod(to, typeBuilder);

            var mappingBuilder = new MappingBuilder(
                this,
                from,
                to,
                typeBuilder,
                mappingConfigurator
                );

            mappingBuilder.BuildCopyImplMethod();

            ObjectsMapperBaseImpl result =
                (ObjectsMapperBaseImpl)Activator.CreateInstance(typeBuilder.CreateType());

            result.Initialize(this, from, to, mappingConfigurator, mappingBuilder.storedObjects.ToArray());
            return(result);
        }
示例#3
0
 /// <summary>
 /// Returns a mapper implementation instance for specified types.
 /// </summary>
 /// <Param name="from">Type of source object</Param>
 /// <Param name="to">Type of destination object</Param>
 /// <Param name="mappingConfigurator">Object which configures mapping.</Param>
 /// <returns>Mapper</returns>
 public ObjectsMapperBaseImpl GetMapperImpl(
     Type from,
     Type to,
     IMappingConfigurator mappingConfigurator)
 {
     return(GetMapperInt(from, to, mappingConfigurator).mapper);
 }
示例#4
0
        /// <summary>
        /// 用自定义映射规则进行模型映射
        /// </summary>
        /// <param name="from"></param>
        /// <param name="config">映射规则</param>
        public static TTo Mapper <TFrom, TTo>(TFrom from, IMappingConfigurator mapConfig) where TFrom : class
        {
            var ignores = new List <string>();

            //初始化忽略映射的属性
            typeof(TFrom).GetProperties().ForEach(p =>
            {
                if (p.GetCustomAttributes(typeof(IgnoreMapperAttribute), false).Length > 0)
                {
                    ignores.Add(p.Name);
                }
            });
            typeof(TTo).GetProperties().ForEach(p =>
            {
                if (p.GetCustomAttributes(typeof(IgnoreMapperAttribute), false).Length > 0)
                {
                    ignores.Add(p.Name);
                }
            });

            if (mapConfig != null && mapConfig is MapConfigBase <TFrom> )
            {
                (mapConfig as MapConfigBase <TFrom>).IgnoreMembers <TFrom, TTo>(ignores.ToArray());
            }
            ObjectsMapper <TFrom, TTo> mapper = ObjectMapperManager.DefaultInstance.GetMapper <TFrom, TTo>(mapConfig);

            return(mapper.Map(from));
        }
示例#5
0
        public static QpDataContext Create(IMappingConfigurator configurator)
        {
            DbConnection connection;

            connection = new NpgsqlConnection(DefaultConnectionString);
            return(Create(configurator, connection));
        }
        public CustomMapperImpl(
            ObjectMapperManager mapperMannager, 
            Type TypeFrom, 
            Type TypeTo, 
            IMappingConfigurator mappingConfigurator,
			object[] storedObjects)
        {
			Initialize(mapperMannager, TypeFrom, TypeTo, mappingConfigurator, storedObjects);
        }
示例#7
0
        public static void Map <TFrom, TTo>(TFrom from, TTo to, IMappingConfigurator mappingConfigurator = null)
        {
            //EmitMapper内部有缓存机制,故不需要再维护Mapper的缓存
            var mapper = mappingConfigurator == null?
                         ObjectMapperManager.DefaultInstance.GetMapper <TFrom, TTo>() :
                             ObjectMapperManager.DefaultInstance.GetMapper <TFrom, TTo>(mappingConfigurator);

            mapper.Map(from, to);
        }
示例#8
0
 public CustomMapperImpl(
     ObjectMapperManager mapperMannager,
     Type TypeFrom,
     Type TypeTo,
     IMappingConfigurator mappingConfigurator,
     object[] storedObjects)
 {
     Initialize(mapperMannager, TypeFrom, TypeTo, mappingConfigurator, storedObjects);
 }
示例#9
0
        public static EF6Model Create(IMappingConfigurator configurator, SqlConnection connection, bool contextOwnsConnection)
        {
            var mapping = configurator.GetMappingInfo(connection);
            var ctx     = new EF6Model(connection, mapping.DbCompiledModel, mapping.Schema, contextOwnsConnection);

            ctx.SiteName         = mapping.Schema.Schema.SiteName;
            ctx.ConnectionString = connection.ConnectionString;
            return(ctx);
        }
示例#10
0
 /// <summary>
 ///   Initializes a new instance of the <see cref="CustomMapper" /> class.
 /// </summary>
 /// <param name="objectMapperManager">The object mapper manager.</param>
 /// <param name="typeFrom">The type from.</param>
 /// <param name="typeTo">The type to.</param>
 /// <param name="mappingConfigurator">The mapping configurator.</param>
 /// <param name="storedObjects">The stored objects.</param>
 protected CustomMapper(
     Mapper objectMapperManager,
     Type typeFrom,
     Type typeTo,
     IMappingConfigurator mappingConfigurator,
     object[] storedObjects)
 {
     Initialize(objectMapperManager, typeFrom, typeTo, mappingConfigurator, storedObjects);
 }
示例#11
0
        internal void Initialize(
            EmitMapperManager MapperMannager,
            Type TypeFrom,
            Type TypeTo,
            IMappingConfigurator mappingConfigurator,
            object[] stroredObjects)
        {
            mapperMannager       = MapperMannager;
            typeFrom             = TypeFrom;
            typeTo               = TypeTo;
            _mappingConfigurator = mappingConfigurator;
            StroredObjects       = stroredObjects;
            if (_mappingConfigurator != null)
            {
                _rootOperation = _mappingConfigurator.GetRootMappingOperation(TypeFrom, TypeTo);
                if (_rootOperation == null)
                {
                    _rootOperation = new RootMappingOperation(TypeFrom, TypeTo);
                }
                var constructor = _rootOperation.TargetConstructor;
                if (constructor != null)
                {
                    _targetConstructor = (DelegateInvokerFunc_0)DelegateInvoker.GetDelegateInvoker(constructor);
                }

                var valuesPostProcessor = _rootOperation.ValuesPostProcessor;
                if (valuesPostProcessor != null)
                {
                    _valuesPostProcessor = (DelegateInvokerFunc_2)DelegateInvoker.GetDelegateInvoker(valuesPostProcessor);
                }

                var converter = _rootOperation.Converter;
                if (converter != null)
                {
                    _converter = (DelegateInvokerFunc_2)DelegateInvoker.GetDelegateInvoker(converter);
                }

                var nullSubstitutor = _rootOperation.NullSubstitutor;
                if (nullSubstitutor != null)
                {
                    _nullSubstitutor = (DelegateInvokerFunc_0)DelegateInvoker.GetDelegateInvoker(nullSubstitutor);
                }

                var sourceFilter = _rootOperation.SourceFilter;
                if (sourceFilter != null)
                {
                    _sourceFilter = (DelegateInvokerFunc_2)DelegateInvoker.GetDelegateInvoker(sourceFilter);
                }

                var destinationFilter = _rootOperation.DestinationFilter;
                if (destinationFilter != null)
                {
                    _destinationFilter = (DelegateInvokerFunc_2)DelegateInvoker.GetDelegateInvoker(destinationFilter);
                }
            }
        }
示例#12
0
 /// <summary>
 /// Returns a Mapper instance for specified types.
 /// </summary>
 /// <typeparam name="TFrom">Type of source object</typeparam>
 /// <typeparam name="TTo">Type of destination object</typeparam>
 /// <Param name="mappingConfigurator">Object which configures mapping.</Param>
 /// <returns>Mapper</returns>
 public ObjectsMapper <TFrom, TTo> GetMapper <TFrom, TTo>(IMappingConfigurator mappingConfigurator)
 {
     return(new ObjectsMapper <TFrom, TTo>(
                GetMapperImpl(
                    typeof(TFrom),
                    typeof(TTo),
                    mappingConfigurator
                    )
                ));
 }
        public TDestination Map <TSource, TDestination>(TSource tSource, IMappingConfigurator configs = null)
        {
            if (tSource == null)
            {
                return(default(TDestination));
            }

            var mapper = ObjectMapperManager.DefaultInstance.GetMapper <TSource, TDestination>(configs);

            return(mapper.Map(tSource));
        }
示例#14
0
 /// <summary>
 /// 实体转换(EmitMapper)
 /// </summary>
 /// <typeparam name="TFrom">源类型</typeparam>
 /// <typeparam name="TTo">目标类型</typeparam>
 /// <param name="from">源对象</param>
 /// <param name="mappingConfigurator">配置器</param>
 /// <returns>目标对象</returns>
 public static TTo Mapper <TFrom, TTo>(this TFrom from, IMappingConfigurator mappingConfigurator = null)
 {
     if (mappingConfigurator == null)
     {
         return(ObjectMapperManager.DefaultInstance.GetMapper <TFrom, TTo>().Map(from));
     }
     else
     {
         return(ObjectMapperManager.DefaultInstance.GetMapper <TFrom, TTo>(mappingConfigurator).Map(from));
     }
 }
示例#15
0
        public static QpDataContext Create(IMappingConfigurator configurator, DbConnection connection)
        {
            var mapping        = configurator.GetMappingInfo();
            var optionsBuilder = new DbContextOptionsBuilder <QpDataContext>();

            optionsBuilder.UseNpgsql <QpDataContext>(connection);
            optionsBuilder.UseModel(mapping.DbCompiledModel);
            QpDataContext ctx = new QpDataContext(optionsBuilder.Options, mapping.Schema);

            ctx.SiteName         = mapping.Schema.Schema.SiteName;
            ctx.ConnectionString = connection.ConnectionString;
            return(ctx);
        }
 public MappingOperationsProcessor(MappingOperationsProcessor prototype)
 {
     LocFrom                 = prototype.LocFrom;
     LocTo                   = prototype.LocTo;
     LocState                = prototype.LocState;
     LocException            = prototype.LocException;
     CompilationContext      = prototype.CompilationContext;
     Operations              = prototype.Operations;
     StoredObjects           = prototype.StoredObjects;
     MappingConfigurator     = prototype.MappingConfigurator;
     ObjectsMapperManager    = prototype.ObjectsMapperManager;
     RootOperation           = prototype.RootOperation;
     StaticConvertersManager = prototype.StaticConvertersManager;
 }
示例#17
0
 public MappingOperationsProcessor(MappingOperationsProcessor prototype)
 {
     locFrom                 = prototype.locFrom;
     locTo                   = prototype.locTo;
     locState                = prototype.locState;
     locException            = prototype.locException;
     compilationContext      = prototype.compilationContext;
     operations              = prototype.operations;
     storedObjects           = prototype.storedObjects;
     mappingConfigurator     = prototype.mappingConfigurator;
     objectsMapperManager    = prototype.objectsMapperManager;
     rootOperation           = prototype.rootOperation;
     staticConvertersManager = prototype.staticConvertersManager;
 }
		public MappingOperationsProcessor(MappingOperationsProcessor prototype)
		{
			locFrom = prototype.locFrom;
			locTo = prototype.locTo;
			locState = prototype.locState;
			locException = prototype.locException;
			compilationContext = prototype.compilationContext;
			operations = prototype.operations;
			storedObjects = prototype.storedObjects;
			mappingConfigurator = prototype.mappingConfigurator;
			objectsMapperManager = prototype.objectsMapperManager;
			rootOperation = prototype.rootOperation;
			staticConvertersManager = prototype.staticConvertersManager;
		}
示例#19
0
 public MappingBuilder(
     ObjectMapperManager objectsMapperManager,
     Type from,
     Type to,
     TypeBuilder typeBuilder,
     IMappingConfigurator mappingConfigurator
     )
 {
     this._objectsMapperManager = objectsMapperManager;
     this._from                = from;
     this._to                  = to;
     this._typeBuilder         = typeBuilder;
     this.StoredObjects        = new List <object>();
     this._mappingConfigurator = mappingConfigurator;
 }
示例#20
0
 public MappingBuilder(
     EmitMapperManager objectsMapperManager,
     Type from,
     Type to,
     TypeBuilder typeBuilder,
     IMappingConfigurator mappingConfigurator
     )
 {
     this.objectsMapperManager = objectsMapperManager;
     this.from                = from;
     this.to                  = to;
     this.typeBuilder         = typeBuilder;
     this.storedObjects       = new List <object>();
     this.mappingConfigurator = mappingConfigurator;
 }
示例#21
0
    /// <summary>
    ///   Initializes a new instance of the <see cref="MappingBuilder" /> class.
    /// </summary>
    /// <param name="objectsMapperManager">The objects mapper manager.</param>
    /// <param name="from">The from.</param>
    /// <param name="to">The to.</param>
    /// <param name="typeBuilder">The type builder.</param>
    /// <param name="mappingConfigurator">The mapping configurator.</param>
    public MappingBuilder(
        Mapper objectsMapperManager,
        Type from,
        Type to,
        TypeBuilder typeBuilder,
        IMappingConfigurator mappingConfigurator)
    {
        _objectsMapperManager = objectsMapperManager;
        _from        = from;
        _to          = to;
        _typeBuilder = typeBuilder;

        StoredObjects        = new List <object>();
        _mappingConfigurator = mappingConfigurator;
    }
示例#22
0
		public MappingBuilder(
			ObjectMapperManager objectsMapperManager,
			Type from,
			Type to,
			TypeBuilder typeBuilder,
			IMappingConfigurator mappingConfigurator
			)
		{
			this.objectsMapperManager = objectsMapperManager;
			this.from = from;
			this.to = to;
			this.typeBuilder = typeBuilder;
			this.storedObjects = new List<object>();
			this.mappingConfigurator = mappingConfigurator;
		}
        protected NHConfigurationBuilder(
            string defaultSchema,
            string connectionString,
            string dialect,
            string showSql,
            string useSecondLevelCache,
            IMappingConfigurator mappingConfigurator)
        {
            DefaultSchema       = defaultSchema;
            ConnectionString    = connectionString;
            Dialect             = dialect;
            ShowSql             = showSql;
            UseSecondLevelCache = useSecondLevelCache;

            _mappingConfigurator = mappingConfigurator;
        }
		public MapperPrimitiveImpl(ObjectMapperManager mapperMannager, Type TypeFrom, Type TypeTo, IMappingConfigurator mappingConfigurator)
			: base(mapperMannager, TypeFrom, TypeTo, mappingConfigurator, null)
		{
			var to = TypeTo == typeof(IEnumerable) ? typeof(object) : TypeTo;
			var from = TypeFrom == typeof(IEnumerable) ? typeof(object) : TypeFrom;

			var staticConv = mappingConfigurator.GetStaticConvertersManager() ?? StaticConvertersManager.DefaultInstance;
			var converterMethod = staticConv.GetStaticConverter(from, to);

			if (converterMethod != null)
			{
				_converter = (MethodInvokerFunc_1)MethodInvoker.GetMethodInvoker(
					null,
					converterMethod
				);
			}
		}
示例#25
0
        /// <summary>
        /// object转换
        /// </summary>
        /// <typeparam name="TIn"></typeparam>
        /// <typeparam name="TOut"></typeparam>
        /// <param name="inData"></param>
        /// <returns></returns>
        public static void Register <TIn, TOut>(IMappingConfigurator config = null)
        {
            Type   tin     = typeof(TIn);
            Type   tout    = typeof(TOut);
            string typeKey = string.Concat(tin, "|", tout);
            ObjectsMapper <TIn, TOut> mapper = null;

            if (config == null)
            {
                mapper = ObjectMapperManager.DefaultInstance.GetMapper <TIn, TOut>();
            }
            else
            {
                mapper = ObjectMapperManager.DefaultInstance.GetMapper <TIn, TOut>(config);
            }
            _dictMapping[typeKey] = mapper.MapperImpl;
        }
示例#26
0
        /// <summary>
        /// Gets the configuration.
        /// </summary>
        /// <typeparam name="TFrom">The type of from.</typeparam>
        /// <typeparam name="TTo">The type of to.</typeparam>
        /// <returns>The configurator instance.</returns>
        /// NOTE: Resolving from IoC can be added here.
        protected virtual ObjectsMapper <TFrom, TTo> GetMapper <TFrom, TTo>()
        {
            var mapper = Mappers.FirstOrDefault(m => m is ObjectsMapper <TFrom, TTo>) as ObjectsMapper <TFrom, TTo>;

            if (mapper == null)
            {
                Tuple <Type, Type, IMappingConfigurator> configuration =
                    MappingConfigurations.FirstOrDefault(mp =>
                                                         mp.Item1.IsAssignableFrom(typeof(TFrom)) && mp.Item2.IsAssignableFrom(typeof(TTo)));
                IMappingConfigurator config = configuration == null ? DefaultConfigurator : configuration.Item3;

                mapper = ObjectMapperManager.DefaultInstance.GetMapper <TFrom, TTo>(config);

                Mappers.Add(mapper);
            }

            return(mapper);
        }
示例#27
0
        /// <summary>
        /// Creates an instance of Mapper for collections.
        /// </summary>
        /// <param name="MapperName">Mapper name. It is used for registration in Mappers repositories.</param>
        /// <param name="mapperMannager">Mappers manager</param>
        /// <param name="TypeFrom">Source type</param>
        /// <param name="TypeTo">Destination type</param>
        /// <param name="SubMapper"></param>
        /// <returns></returns>
        public static MapperForCollectionImpl CreateInstance(
            string MapperName,
            ObjectMapperManager mapperMannager,
            Type TypeFrom,
            Type TypeTo,
            ObjectsMapperDescr SubMapper,
            IMappingConfigurator mappingConfigurator
            )
        {
            TypeBuilder tb = DynamicAssemblyManager.DefineType(
                "GenericListInv_" + MapperName,
                typeof(MapperForCollectionImpl)
                );

            if (TypeTo.IsGenericType() && TypeTo.GetGenericTypeDefinition() == typeof(List <>))
            {
                MethodBuilder methodBuilder = tb.DefineMethod(
                    "CopyToListInvoke",
                    MethodAttributes.Family | MethodAttributes.Virtual,
                    typeof(object),
                    new Type[] { typeof(IEnumerable) }
                    );

                InvokeCopyImpl(TypeTo, "CopyToList").Compile(new CompilationContext(methodBuilder.GetILGenerator()));

                methodBuilder = tb.DefineMethod(
                    "CopyToListScalarInvoke",
                    MethodAttributes.Family | MethodAttributes.Virtual,
                    typeof(object),
                    new Type[] { typeof(object) }
                    );

                InvokeCopyImpl(TypeTo, "CopyToListScalar").Compile(
                    new CompilationContext(methodBuilder.GetILGenerator())
                    );
            }

            MapperForCollectionImpl result = (MapperForCollectionImpl)Activator.CreateInstance(tb.CreateTypeInfo().AsType());

            result.Initialize(mapperMannager, TypeFrom, TypeTo, mappingConfigurator, null);
            result.subMapper = SubMapper;

            return(result);
        }
        public MapperPrimitiveImpl(ObjectMapperManager mapperMannager, Type TypeFrom, Type TypeTo, IMappingConfigurator mappingConfigurator)
            : base(mapperMannager, TypeFrom, TypeTo, mappingConfigurator, null)
        {
            var to   = TypeTo == typeof(IEnumerable) ? typeof(object) : TypeTo;
            var from = TypeFrom == typeof(IEnumerable) ? typeof(object) : TypeFrom;

            var staticConv      = mappingConfigurator.GetStaticConvertersManager() ?? StaticConvertersManager.DefaultInstance;
            var converterMethod = staticConv.GetStaticConverter(from, to);

            if (converterMethod != null)
            {
                _converter = (MethodInvokerFunc_1)MethodInvoker.GetMethodInvoker(
                    null,
                    converterMethod
                    );
            }
        }
示例#29
0
 public static EF6Model Create(IMappingConfigurator configurator, SqlConnection connection)
 {
     return(Create(configurator, connection, true));
 }
示例#30
0
 public static EF6Model Create(IMappingConfigurator configurator)
 {
     return(Create(configurator, new SqlConnection(DefaultConnectionString), true));
 }
 /// <summary>
 ///   Initializes the <see cref="MapperCore" /> class.
 /// </summary>
 static MapperCore()
 {
     _DefaultConfigurator   = new DefaultMapConfig();
     _Mappers               = new ConcurrentBag <object>();
     _MappingConfigurations = new ConcurrentBag <Tuple <Type, Type, IMappingConfigurator> >();
 }
    /// <summary>
    /// </summary>
    /// <param name="objectMapperManager">The object mapper manager.</param>
    /// <param name="typeFrom">The type from.</param>
    /// <param name="typeTo">The type to.</param>
    /// <param name="mappingConfigurator">The mapping configurator.</param>
    /// <param name="storedObjects">The stored objects.</param>
    internal void Initialize(
        Mapper objectMapperManager,
        Type typeFrom,
        Type typeTo,
        IMappingConfigurator mappingConfigurator,
        object[] storedObjects)
    {
        Mapper              = objectMapperManager;
        TypeFrom            = typeFrom;
        TypeTo              = typeTo;
        MappingConfigurator = mappingConfigurator;
        StoredObjects       = storedObjects;

        if (MappingConfigurator != null)
        {
            RootOperation = MappingConfigurator.GetRootMappingOperation(typeFrom, typeTo)
                            ?? new RootMappingOperation(typeFrom, typeTo);

            var constructor = RootOperation.TargetConstructor;

            if (constructor != null)
            {
                TargetConstructor = (DelegateInvokerFunc0)DelegateInvoker.GetDelegateInvoker(constructor);
            }

            var valuesPostProcessor = RootOperation.ValuesPostProcessor;

            if (valuesPostProcessor != null)
            {
                ValuesPostProcessor = (DelegateInvokerFunc2)DelegateInvoker.GetDelegateInvoker(valuesPostProcessor);
            }

            var converter = RootOperation.Converter;

            if (converter != null)
            {
                Converter = (DelegateInvokerFunc2)DelegateInvoker.GetDelegateInvoker(converter);
            }

            var nullSubstitutor = RootOperation.NullSubstitutor;

            if (nullSubstitutor != null)
            {
                NullSubstitutor = (DelegateInvokerFunc0)DelegateInvoker.GetDelegateInvoker(nullSubstitutor);
            }

            var sourceFilter = RootOperation.SourceFilter;

            if (sourceFilter != null)
            {
                SourceFilter = (DelegateInvokerFunc2)DelegateInvoker.GetDelegateInvoker(sourceFilter);
            }

            var destinationFilter = RootOperation.DestinationFilter;

            if (destinationFilter != null)
            {
                DestinationFilter = (DelegateInvokerFunc2)DelegateInvoker.GetDelegateInvoker(destinationFilter);
            }
        }
    }
示例#33
0
        public void Initialize(
            ObjectMapperManager MapperMannager, 
            Type TypeFrom, 
            Type TypeTo, 
			IMappingConfigurator mappingConfigurator,
			object[] stroredObjects)
        {
            mapperMannager = MapperMannager;
            typeFrom = TypeFrom;
            typeTo = TypeTo;
			_mappingConfigurator = mappingConfigurator;
			StroredObjects = stroredObjects;
			if (_mappingConfigurator != null)
			{
				_rootOperation = _mappingConfigurator.GetRootMappingOperation(TypeFrom, TypeTo);
				if (_rootOperation == null)
				{
					_rootOperation = new RootMappingOperation(TypeFrom, TypeTo);
				}
				var constructor = _rootOperation.TargetConstructor;
                if (constructor != null)
                {
                    _targetConstructor = (DelegateInvokerFunc_0)DelegateInvoker.GetDelegateInvoker(constructor);
                }

                var valuesPostProcessor = _rootOperation.ValuesPostProcessor;
                if (valuesPostProcessor != null)
                {
                    _valuesPostProcessor = (DelegateInvokerFunc_2)DelegateInvoker.GetDelegateInvoker(valuesPostProcessor);
                }

                var converter = _rootOperation.Converter;
                if (converter != null)
                {
                    _converter = (DelegateInvokerFunc_2)DelegateInvoker.GetDelegateInvoker(converter);
                }

                var nullSubstitutor = _rootOperation.NullSubstitutor;
                if (nullSubstitutor != null)
                {
                    _nullSubstitutor = (DelegateInvokerFunc_0)DelegateInvoker.GetDelegateInvoker(nullSubstitutor);
                }
			}
        }
示例#34
0
        internal ObjectsMapperDescr GetMapperInt(
            Type from,
            Type to,
            IMappingConfigurator mappingConfigurator)
        {
            lock (this)
            {
                if (to == null)
                {
                    to = typeof(object);
                }
                if (from == null)
                {
                    from = typeof(object);
                }


                MapperKey          MapperTypeKey = new MapperKey(from, to, mappingConfigurator.GetConfigurationName());
                ObjectsMapperDescr result;

                int mapperId;
                if (!objectsMapperIds.TryGetValue(MapperTypeKey, out mapperId))
                {
                    result = new ObjectsMapperDescr(
                        null,
                        MapperTypeKey,
                        0
                        );
                    AddMapper(result);

                    string MapperTypeName = GetMapperTypeName(from, to);
                    ObjectsMapperBaseImpl createdMapper;
                    if (MapperPrimitiveImpl.IsSupportedType(to))
                    {
                        createdMapper = new MapperPrimitiveImpl(this, from, to, mappingConfigurator);
                    }
                    else if (MapperForCollectionImpl.IsSupportedType(to))
                    {
                        ObjectsMapperDescr Mapper = GetMapperInt(
                            MapperForCollectionImpl.GetSubMapperTypeFrom(from),
                            MapperForCollectionImpl.GetSubMapperTypeTo(to),
                            mappingConfigurator);

                        createdMapper = MapperForCollectionImpl.CreateInstance(
                            MapperTypeName + GetNextMapperId(),
                            this,
                            from,
                            to,
                            Mapper,
                            mappingConfigurator
                            );
                    }
                    else
                    {
                        createdMapper = BuildObjectsMapper(
                            MapperTypeName + GetNextMapperId(),
                            from,
                            to,
                            mappingConfigurator
                            );
                    }

                    result.mapper = createdMapper;
                    return(result);
                }
                else
                {
                    return(objectsMappersList[mapperId]);
                }
            }
        }
示例#35
0
 /// <summary>
 /// 获取类型转换方法
 /// </summary>
 /// <typeparam name="TFrom">来源类型</typeparam>
 /// <typeparam name="TTo">目标类型</typeparam>
 /// <param name="mappingConfigurator">匹配配置</param>
 /// <returns>类型转换方法</returns>
 public static ObjectsMapper <TFrom, TTo> GetMapper <TFrom, TTo>(IMappingConfigurator mappingConfigurator)
 {
     return(ObjectMapperManager.DefaultInstance.GetMapper <TFrom, TTo>(mappingConfigurator));
 }