/// <summary> /// Generate IL for the setter. /// </summary> /// <param name="stubField">The proxy stub field.</param> /// <param name="dbKey">The database key of this property.</param> /// <param name="propMetadata">The type metadata for this property.</param> /// <param name="ilGenerator">The setter's IL generator.</param> private static void GenerateSetterIL( FieldInfo stubField, string dbKey, TypeMetadata propMetadata, ILGenerator ilGenerator) { // this._stub. ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldfld, stubField); ilGenerator.Emit(OpCodes.Ldstr, dbKey); // this._stub.?(value). ilGenerator.Emit(OpCodes.Ldarg_1); propMetadata.CallStubSetter(ilGenerator); // return ?; ilGenerator.Emit(OpCodes.Ret); }
/// <summary> /// Generate IL for SetElemAt method. /// </summary> /// <param name="elemTypeMetadata"></param> /// <param name="ilGenerator"></param> private static void GenerateSetElemAtIL( TypeMetadata elemTypeMetadata, ILGenerator ilGenerator) { // this._stub. ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldfld, typeof(ListProxy <>).MakeGenericType(elemTypeMetadata.Type).GetField("stub", BindingFlags.NonPublic | BindingFlags.Instance)); // this.ElemPrefix(index). ilGenerator.Emit(OpCodes.Ldarg_0); ilGenerator.Emit(OpCodes.Ldarg_1); ilGenerator.Emit(OpCodes.Call, typeof(ListProxy <>).MakeGenericType(elemTypeMetadata.Type).GetMethod("GetElemDbKey", BindingFlags.NonPublic | BindingFlags.Instance)); // this._stub.?Setter(elemPrefix, value). ilGenerator.Emit(OpCodes.Ldarg_2); elemTypeMetadata.CallStubSetter(ilGenerator); // return ?; ilGenerator.Emit(OpCodes.Ret); }