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(); }
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); } }
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); }