예제 #1
0
    void EqualDependencyPropertyField()
    {
        var method = typeDefinition.GetStaticConstructor();

        var nameProperty = propertyDefinition.Name;
        var typeProperty = propertyDefinition.PropertyType;
        var callTypeOf   = moduleDefinition.GetMethodReference("System.Type", "GetTypeFromHandle");
        var callCreate   = xamarinAssembly.GetMethodReference("Xamarin.Forms.BindableProperty", "Create", 10);

        method.Body.Instructions.RemoveAt(method.Body.Instructions.Count - 1);

        var processor = method.Body.GetILProcessor();

        processor.Emit(OpCodes.Ldstr, nameProperty);
        processor.Emit(OpCodes.Ldtoken, typeProperty);
        processor.Emit(OpCodes.Call, callTypeOf);
        processor.Emit(OpCodes.Ldtoken, typeDefinition);
        processor.Emit(OpCodes.Call, callTypeOf);
        processor.Emit(OpCodes.Ldnull);
        processor.Emit(OpCodes.Ldc_I4_2);
        processor.Emit(OpCodes.Ldnull);
        processor.Emit(OpCodes.Ldnull);
        processor.Emit(OpCodes.Ldnull);
        processor.Emit(OpCodes.Ldnull);
        processor.Emit(OpCodes.Ldnull);
        processor.Emit(OpCodes.Call, callCreate);
        processor.Emit(OpCodes.Stsfld, dependencyPropertyField);
        processor.Emit(OpCodes.Ret);
    }
    void EqualDependencyPropertyField()
    {
        var method = typeDefinition.GetStaticConstructor();

        var nameProperty = propertyDefinition.Name;
        var typeProperty = propertyDefinition.PropertyType;
        var callTypeOf   = moduleDefinition.GetMethodReference("System.Type", "GetTypeFromHandle");
        var callRegister = baseAssembly.GetMethodReference("System.Windows.DependencyProperty", "Register", 3);

        method.Body.Instructions.RemoveAt(method.Body.Instructions.Count - 1);

        var processor = method.Body.GetILProcessor();

        processor.Emit(OpCodes.Ldstr, nameProperty);
        processor.Emit(OpCodes.Ldtoken, typeProperty);
        processor.Emit(OpCodes.Call, callTypeOf);
        processor.Emit(OpCodes.Ldtoken, typeDefinition);
        processor.Emit(OpCodes.Call, callTypeOf);
        processor.Emit(OpCodes.Call, callRegister);
        processor.Emit(OpCodes.Stsfld, dependencyPropertyField);
        processor.Emit(OpCodes.Ret);
    }
    void EqualBindingContext()
    {
        var method = typeDefinition.GetConstructors().First();

        var callPut_BindingContext = xamarinAssembly.GetMethodReference("Xamarin.Forms.BindableObject", "set_BindingContext");

        method.Body.Instructions.RemoveAt(method.Body.Instructions.Count - 1);

        var processor = method.Body.GetILProcessor();

        processor.Emit(OpCodes.Nop);
        processor.Emit(OpCodes.Ldarg_0);
        processor.Emit(OpCodes.Ldarg_0);
        processor.Emit(OpCodes.Call, callPut_BindingContext);
        processor.Emit(OpCodes.Nop);
        processor.Emit(OpCodes.Ret);
    }