Пример #1
0
        private void CreateProperties(EmitTypeFactory factory, Type originalType, Type adapterType, TypeBuilder typeBldr, PropertyBuilder sourceProperty, PropertyBuilder factoryProperty)
        {
            var getSource  = ExecBld.GetProp(sourceProperty, ExecBld.GetThis());
            var getFactory = ExecBld.GetProp(factoryProperty, ExecBld.GetThis());

            var getMethod = this.GetType().GetMethod(nameof(GetValue));
            var setMethod = this.GetType().GetMethod(nameof(SetValue));

            var properties = new List <PropertyInfo>();

            int index = 0;

            foreach (var t in adapterType.GetAllInterfaceProperties())
            {
                var tProp = originalType.GetProperty(t.Name);                //, t.PropertyType);
                properties.Add(tProp);

                var get =
                    ExecBld.Return(
                        ExecBld.Cast(
                            ExecBld.Call(getMethod, getFactory, getSource, ExecBld.GetConst(index)),
                            typeof(object), tProp.PropertyType));

                var set = ExecBld.Return(
                    ExecBld.Call(setMethod, getFactory, getSource, ExecBld.GetConst(index),
                                 ExecBld.Cast(ExecBld.GetArg(1), tProp.PropertyType, typeof(object)))
                    );

                factory.AddProperty(typeBldr, t, get, set, t.DeclaringType);

                index++;
            }

            Properties = properties.ToArray();
        }
Пример #2
0
        private void CreateProperties(EmitTypeFactory factory, Type originalType, Type adapterType, TypeBuilder typeBldr, PropertyBuilder sourceProperty)
        {
            var getSource = ExecBld.GetProp(sourceProperty, ExecBld.GetThis());

            foreach (var t in adapterType.GetAllInterfaceProperties())
            {
                var tProp = originalType.GetProperty(t.Name);                //, t.PropertyType);

                var get = ExecBld.Return(ExecBld.GetProp(tProp, getSource));
                var set = ExecBld.Return(ExecBld.SetProp(tProp, getSource, ExecBld.GetArg(1)));

                factory.AddProperty(typeBldr, t, get, set, t.DeclaringType);
            }
        }
Пример #3
0
        public static void CreateIDtoAdapter(EmitTypeFactory factory, TypeBuilder typeBldr, PropertyBuilder sourceProperty)
        {
            var body = ExecBld.Return(ExecBld.GetProp(sourceProperty, ExecBld.GetThis()));

            factory.CreateMethod(typeBldr, nameof(IDtoAdapter.GetSource), typeof(object), new Type[0], typeof(IDtoAdapter), body);
        }