Exemplo n.º 1
0
 private Mapper(Action <MappingInstructions> mapperBuilder)
 {
     _mappers = Algorithm.LazyIndexer <MapperKey, Action <object, object> >(key =>
     {
         var instructions = new MappingInstructions(key.SourceType, key.DestType);
         mapperBuilder(instructions);
         return(GenerateMapper(instructions));
     },
                                                                            new MapperKeyEqualityComparer());
 }
Exemplo n.º 2
0
        private static Action <object, object> GenerateMapper(MappingInstructions instructions)
        {
            var dm = new DynamicMethod(
                "Map" + instructions.SourceType.Name + "To" + instructions.SourceType.Name + Interlocked.Increment(ref _nextMapperId),
                typeof(void),
                new[] { typeof(object), typeof(object) },
                true);
            var ilGen = dm.GetILGenerator();

            foreach (var mapping in instructions.GetMappings())
            {
                mapping.GenerateMap(ilGen, 0, 1);
            }

            ilGen.Emit(OpCodes.Ret);
            return((Action <object, object>)dm.CreateDelegate(typeof(Action <object, object>)));
        }