private FieldDefinition CreateField(ICommonType viewModelType, ICommonProperty property)
        {
            var fieldName = nameRulesService.ConvertName(property.Name, UseNameRulesFor.Property, UseNameRulesFor.Field);

            log.Debug($"Create field with name '{fieldName}'");
            var field = new FieldDefinition(fieldName, FieldAttributes.Private, property.MonoCecil.PropertyType);

            viewModelType.MonoCecil.Fields.Add(field);

            return(field);
        }
Esempio n. 2
0
 public PropertyGroup(ICommonField field,
                      ICommonProperty property,
                      ICommonMethod calledMethodBeforeGetProperty,
                      ICommonMethod calledMethodBeforeSetProperty,
                      ICommonMethod calledMethodAfterSuccessSetProperty,
                      ICommonMethod calledMethodAfterSetProperty)
 {
     Field    = field;
     Property = property;
     CalledMethodBeforeGetProperty       = calledMethodBeforeGetProperty;
     CalledMethodBeforeSetProperty       = calledMethodBeforeSetProperty;
     CalledMethodAfterSuccessSetProperty = calledMethodAfterSuccessSetProperty;
     CalledMethodAfterSetProperty        = calledMethodAfterSetProperty;
 }
 public DependencyGroup(ICommonField field, ICommonProperty property)
 {
     Field    = field;
     Property = property;
 }
Esempio n. 4
0
 public static bool TryGetProperty(this IHasProperties hasProperties, string propertyName, out ICommonProperty foundCommonProperty)
 {
     return((foundCommonProperty = hasProperties.GetProperty(propertyName)) != null);
 }
Esempio n. 5
0
 private static (ICommonProperty Property, List <ICommonField> Fields) CreateEmptyPatchingPropertyGroup(ICommonProperty property)
 {
     return(property, new List <ICommonField>());
 }
Esempio n. 6
0
        private FieldDefinition CreateField(ICommonAssembly assembly, ICommonType frameworkElementType, ICommonProperty property)
        {
            var fieldName = nameRulesService.ConvertName(property.Name, UseNameRulesFor.DependencyProperty, UseNameRulesFor.DependencyField);

            log.Debug($"Create field with name '{fieldName}'");
            var field = new FieldDefinition(fieldName, FieldAttributes.Public | FieldAttributes.Static | FieldAttributes.InitOnly, assembly.MonoCecil.MainModule.ImportReference(dependencyPropertyType.GetValue(assembly).MonoCecil));

            frameworkElementType.MonoCecil.Fields.Add(field);

            InitializeInStaticConstructor(assembly, frameworkElementType, property, field);

            return(field);
        }
Esempio n. 7
0
        private void InitializeInStaticConstructor(ICommonAssembly assembly, ICommonType frameworkElementType, ICommonProperty property, FieldReference field)
        {
            var staticConstructor = frameworkElementType.MonoCecil.GetStaticConstructor();

            if (staticConstructor == null)
            {
                staticConstructor = new MethodDefinition(".cctor", MethodAttributes.Private | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName | MethodAttributes.Static, assembly.MonoCecil.MainModule.TypeSystem.Void);
                staticConstructor.Body.Instructions.Add(Instruction.Create(OpCodes.Ret));
                frameworkElementType.MonoCecil.Methods.Add(staticConstructor);
            }

            staticConstructor.Body.Instructions.Insert(0, Instruction.Create(OpCodes.Ldstr, property.Name));
            staticConstructor.Body.Instructions.Insert(1, Instruction.Create(OpCodes.Ldtoken, property.MonoCecil.PropertyType));
            staticConstructor.Body.Instructions.Insert(2, Instruction.Create(OpCodes.Call, getTypeFromHandleMethod.GetValue(assembly)));
            staticConstructor.Body.Instructions.Insert(3, Instruction.Create(OpCodes.Ldtoken, frameworkElementType.MonoCecil));
            staticConstructor.Body.Instructions.Insert(4, Instruction.Create(OpCodes.Call, getTypeFromHandleMethod.GetValue(assembly)));
            staticConstructor.Body.Instructions.Insert(5, Instruction.Create(OpCodes.Call, registerMethod.GetValue(assembly)));
            staticConstructor.Body.Instructions.Insert(6, Instruction.Create(OpCodes.Stsfld, field));
        }