Exemplo n.º 1
0
        public void CacheTest()
        {
            IMapperEmit mapper1 = AutoMapperEmit.Build(typeof(Student), typeof(Person));
            IMapperEmit mapper2 = AutoMapperEmit.Build(typeof(Student), typeof(Person));

            Assert.AreEqual(mapper1.GetHashCode(), mapper2.GetHashCode());
        }
Exemplo n.º 2
0
        public void ValueTypeTest()
        {
            IMapperEmit m = AutoMapperEmit.Build(typeof(int), typeof(int));
            int         x = 1;
            int         i = (int)m.Map(x);

            Assert.AreEqual(x, i);
        }
Exemplo n.º 3
0
        public void MapParametersTest()
        {
            IMapperEmit m = AutoMapperEmit.Build(typeof(Student), typeof(Course));
            Student     s = new Student {
                ImAField = "ImAField", Nickname = "Zezito", Nr = 27721, Name = "Ze Manel", Address = "Rua de Cima"
            };
            Course c = (Course)m.Map(s);

            Assert.AreEqual(s.Address, c.Address);
        }
Exemplo n.º 4
0
        public void MapTest()
        {
            IMapperEmit m = AutoMapperEmit.Build(typeof(Student), typeof(Person));
            Student     s = new Student {
                Nr = 27721, Name = "Ze Manel"
            };
            Person p = (Person)m.Map(s);

            Assert.AreEqual(s.Name, p.Name);
        }
Exemplo n.º 5
0
        public void MapByBindTest()
        {
            IMapperEmit m = AutoMapperEmit.Build(typeof(Student), typeof(Person))
                            .Bind(MappingEmit.Fields);
            Student s = new Student {
                ImAField = "ImAField", Nickname = "Zezito", Nr = 27721, Name = "Ze Manel"
            };
            Person p = (Person)m.Map(s);

            Assert.AreEqual(s.ImAField, p.ImAField);
        }
Exemplo n.º 6
0
        public void MapCustomAttributeTest()
        {
            IMapperEmit m = AutoMapperEmit.Build(typeof(Student), typeof(Person))
                            .Bind(MappingEmit.CustomAttributes);
            Student s = new Student {
                ImAField = "ImAField", Nickname = "Zezito", Nr = 27721, Name = "Ze Manel"
            };
            Person p = (Person)m.Map(s);

            Assert.AreEqual(s.Nickname, p.Nickname);
        }
Exemplo n.º 7
0
        public static IMapperEmit Build(Type klassSrc, Type klassDest)
        {
            if (cache == null)
            {
                cache = new CacheStructure();
            }
            IMapperEmit mapper = cache.GetMapper(klassSrc, klassDest);

            if (mapper == null)
            {
                mapper = new MapperEmit(klassSrc, klassDest);
                cache.Add(klassSrc, klassDest, mapper);
            }
            return(mapper);
        }
Exemplo n.º 8
0
        public static Mapper <TSrc, TDest> Build <TSrc, TDest> ()
        {
            if (cache == null)
            {
                cache = new CacheStructure();
            }
            IMapperEmit mapper = cache.GetMapper(typeof(TSrc), typeof(TDest));

            if (mapper == null)
            {
                mapper = new Mapper <TSrc, TDest>(typeof(TSrc), typeof(TDest));
                cache.Add(typeof(TSrc), typeof(TDest), mapper);
            }
            return((Mapper <TSrc, TDest>)mapper);
        }
Exemplo n.º 9
0
        public void MapArrayTest()
        {
            IMapperEmit m = AutoMapperEmit.Build(typeof(Student), typeof(Person));

            Student[] s = { new Student {
                                ImAField = "ImAField", Nickname = "Zezito", Nr = 27721, Name = "Ze Manel"
                            },
                            new Student {
                                ImAField = "ImAField", Nickname = "Xico", Nr = 27722, Name = "Francisco"
                            } };
            Person[]  p = (Person[])m.Map(s);
            for (int i = 0; i < p.Length; ++i)
            {
                Assert.AreEqual(s[i].Name, p[i].Name);
            }
        }
Exemplo n.º 10
0
        public void MapByMatchTest()
        {
            int[]       array = { 27999, 27898, 27162 };
            IMapperEmit m     = AutoMapperEmit.Build(typeof(Student), typeof(Person))
                                .Match("Nr", "Id")
                                .Match("Org", "Org");
            Student s = new Student
            {
                ImAField = "ImAField",
                Nickname = "Zezito",
                Nr       = 27721,
                Name     = "Ze Manel",
                Org      = new School("Lisbon", array, "ISEL")
            };
            Person p = (Person)m.Map(s);

            Assert.AreEqual(s.Nr, p.Id);
            Assert.AreEqual(s.Org.Name, p.Org.Name);
        }
Exemplo n.º 11
0
        public void Add(Type src, Type dest, IMapperEmit mapper)
        {
            KeyValuePair <Type, Type> pair = new KeyValuePair <Type, Type>(src, dest);

            cacheDictionary.Add(pair, mapper);
        }
Exemplo n.º 12
0
        public override object Copy(object objSrc)
        {
            IMapperEmit m = null;

            if (emitter != null)
            {
                emitter.Copy(objSrc);
            }
            TypeBuilder   tBuilder = GetTypeBuilder("Field");
            MethodBuilder mBuilder = GetMethodBuilder(tBuilder);
            FieldBuilder  fb       = tBuilder.DefineField(
                "target",
                typeof(IMapperEmit),
                FieldAttributes.Private);
            ConstructorBuilder cb = tBuilder.DefineConstructor(
                MethodAttributes.Public,
                CallingConventions.ExplicitThis,
                new Type[] { typeof(IMapperEmit) });
            /*********************************** IL CODE ***************************/

            ILGenerator cbIlGen = cb.GetILGenerator();

            cbIlGen.Emit(OpCodes.Ldarg_0);
            cbIlGen.Emit(OpCodes.Ldarg_1);
            cbIlGen.Emit(OpCodes.Stfld, fb);
            cbIlGen.Emit(OpCodes.Ret);

            ILGenerator ilGenerator = mBuilder.GetILGenerator();

            ilGenerator.Emit(OpCodes.Newobj, dest.GetConstructors()[0]);

            foreach (KeyValuePair <FieldInfo, FieldInfo> pair in fieldList)
            {
                if (pair.Key.FieldType.IsAssignableFrom(pair.Value.FieldType))
                {
                    ilGenerator.Emit(OpCodes.Dup);
                    ilGenerator.Emit(OpCodes.Ldarg_1);
                    ilGenerator.Emit(OpCodes.Ldfld, ((FieldInfo)pair.Key));
                    ilGenerator.Emit(OpCodes.Stfld, ((FieldInfo)pair.Value));
                }
                else
                {
                    if (map.TryGetValue(pair, out m))
                    {
                        ilGenerator.Emit(OpCodes.Dup);
                        ilGenerator.Emit(OpCodes.Ldarg_1);
                        ilGenerator.Emit(OpCodes.Ldfld, pair.Key);
                        ilGenerator.Emit(OpCodes.Ldfld, fb);
                        ilGenerator.Emit(OpCodes.Callvirt, typeof(IMapperEmit).GetMethod("Map"));
                        ilGenerator.Emit(OpCodes.Stfld, pair.Value);
                    }
                }
            }

            ilGenerator.Emit(OpCodes.Ret);
            /*********************************** END ***************************/

            Type t = tBuilder.CreateType();

            emitter = (IEmitter)Activator.CreateInstance(t, m);
            asm.Save(tBuilder.Name + ".dll");
            return(emitter.Copy(objSrc));
        }
Exemplo n.º 13
0
        public override object Copy(object objSrc)
        {
            IMapperEmit m = null;

            if (emitter != null)
            {
                return(emitter.Copy(objSrc));
            }
            TypeBuilder   tBuilder = GetTypeBuilder("Property");
            MethodBuilder mBuilder = GetMethodBuilder(tBuilder);

            FieldBuilder fb = tBuilder.DefineField(
                "target",
                typeof(IMapperEmit),
                FieldAttributes.Private);
            ConstructorBuilder cb = tBuilder.DefineConstructor(
                MethodAttributes.Public,
                CallingConventions.ExplicitThis,
                new Type[] { typeof(IMapperEmit) });

            /*********************************** IL CODE ***************************/

            ILGenerator cbIlGen = cb.GetILGenerator();

            cbIlGen.Emit(OpCodes.Ldarg_0);
            cbIlGen.Emit(OpCodes.Call, typeof(object).GetConstructor(Type.EmptyTypes));
            cbIlGen.Emit(OpCodes.Ldarg_0);
            cbIlGen.Emit(OpCodes.Ldarg_1);
            cbIlGen.Emit(OpCodes.Stfld, fb);
            cbIlGen.Emit(OpCodes.Ret);

            ILGenerator ilGenerator = mBuilder.GetILGenerator();

            LocalBuilder localSrc = ilGenerator.DeclareLocal(src);

            ilGenerator.Emit(OpCodes.Ldarg_1);
            ilGenerator.Emit(OpCodes.Castclass, src);
            ilGenerator.Emit(OpCodes.Stloc, localSrc);
            ilGenerator.Emit(OpCodes.Newobj, dest.GetConstructors()[0]);

            foreach (KeyValuePair <PropertyInfo, PropertyInfo> pair in propertyList)
            {
                if (pair.Key.PropertyType.IsAssignableFrom(pair.Value.PropertyType))
                {
                    ilGenerator.Emit(OpCodes.Dup);
                    ilGenerator.Emit(OpCodes.Ldloc, localSrc);
                    ilGenerator.Emit(OpCodes.Callvirt, pair.Key.GetGetMethod());
                    ilGenerator.Emit(OpCodes.Callvirt, pair.Value.GetSetMethod());
                }
                else
                {
                    if (map.TryGetValue(pair, out m))
                    {
                        ilGenerator.Emit(OpCodes.Dup);
                        ilGenerator.Emit(OpCodes.Ldarg_0);
                        ilGenerator.Emit(OpCodes.Ldfld, fb);
                        ilGenerator.Emit(OpCodes.Ldloc, localSrc);
                        ilGenerator.Emit(OpCodes.Callvirt, pair.Key.GetGetMethod());
                        ilGenerator.Emit(OpCodes.Callvirt, typeof(IMapperEmit).GetMethod("Map", new [] { typeof(object) }));
                        ilGenerator.Emit(OpCodes.Callvirt, pair.Value.GetSetMethod());
                    }
                }
            }
            ilGenerator.Emit(OpCodes.Ret);

            Type t = tBuilder.CreateType();

            asm.Save(tBuilder.Name + ".dll");

            emitter = (IEmitter)Activator.CreateInstance(t, m);
            return(emitter.Copy(objSrc));
        }