Exemple #1
0
 /// <summary>
 /// Creates a new value change record.
 /// </summary>
 /// <param name="valueChange">The value change record to create.</param>
 public void CreateValueChange(IValueChange valueChange)
 {
     this.context.CreateValueChange(
         valueChange.Id,
         valueChange.MappingEntityTransactionId,
         valueChange.ValueName,
         valueChange.PreviousValue,
         valueChange.NewValue);
 }
Exemple #2
0
        /// <summary>
        /// Two way binding for datasource, graphicObj=>dataSource link, datasource value has priority
        /// and will be set as init for source property (in emitDataSourceBindings func)
        /// </summary>
        /// <param name="orig">Graphic object instance, source of binding</param>
        /// <param name="origMember">Origin member name</param>
        /// <param name="dest">datasource instance, target of the binding</param>
        /// <param name="destMember">Destination member name</param>
        static void dataSourceReverseBinding(IValueChange orig, string origMember, object dest, string destMember)
        {
            Type tOrig = orig.GetType ();
            Type tDest = dest.GetType ();
            PropertyInfo piOrig = tOrig.GetProperty (origMember);
            PropertyInfo piDest = tDest.GetProperty (destMember);

            #region ValueChanged emit
            DynamicMethod dm = new DynamicMethod ("dyn_valueChanged" + NewId,
                typeof (void), CompilerServices.argsBoundValueChange, true);
            ILGenerator il = dm.GetILGenerator (256);

            System.Reflection.Emit.Label endMethod = il.DefineLabel ();

            il.DeclareLocal (CompilerServices.TObject);
            il.Emit (OpCodes.Nop);

            //load value changed member name onto the stack
            il.Emit (OpCodes.Ldarg_2);
            il.Emit (OpCodes.Ldfld, CompilerServices.fiVCMbName);

            //test if it's the expected one
            il.Emit (OpCodes.Ldstr, origMember);
            il.Emit (OpCodes.Ldc_I4_4);//StringComparison.Ordinal
            il.Emit (OpCodes.Callvirt, CompilerServices.stringEquals);
            il.Emit (OpCodes.Brfalse, endMethod);
            //set destination member with valueChanged new value
            //load destination ref
            il.Emit (OpCodes.Ldarg_0);
            //load new value onto the stack
            il.Emit (OpCodes.Ldarg_2);
            il.Emit (OpCodes.Ldfld, CompilerServices.fiVCNewValue);

            CompilerServices.emitConvert (il, piOrig.PropertyType, piDest.PropertyType);

            il.Emit (OpCodes.Callvirt, piDest.GetSetMethod ());

            il.MarkLabel (endMethod);
            il.Emit (OpCodes.Ret);
            #endregion

            orig.ValueChanged += (EventHandler<ValueChangeEventArgs>)dm.CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>), dest);
        }
Exemple #3
0
 /// <summary>
 /// Creates a new value change record.
 /// </summary>
 /// <param name="valueChange">The value change record to create.</param>
 public void CreateValueChange(IValueChange valueChange)
 {
     this.Invoke(
         () => this.repository.CreateValueChange(valueChange),
         nameof(this.repository.CreateValueChange));
 }