Declare() public method

public Declare ( Func localBuilderFactory ) : LocalBuilder
localBuilderFactory Func
return System.Reflection.Emit.LocalBuilder
        public override LocalBuilder BuildArguments(ILGenerator ilGenerator)
        {
            LocalBuilder           methodLocalBuilder    = null;
            FieldBuilder           contractFieldBuilder  = null;
            LocalBuilder           aspectArgLocalBuilder = null;
            AspectArgsMethodWeaver methodWeaver          = null;
            ConstructorInfo        ctorInterceptionArgs  = null;

            methodLocalBuilder = LocalBuilderRepository.Declare(() => {
                return(ilGenerator.DeclareLocal(typeof(MethodInfo)));
            });

            aspectArgLocalBuilder = ilGenerator.DeclareLocal(ArgumentType);
            contractFieldBuilder  = WeavingSettings.TypeDefinition.GetFieldBuilder(WeavingSettings.ContractType);
            methodWeaver          = new AspectArgsMethodWeaver(Member, methodLocalBuilder, Parameters, aspectWeavingSettings);
            methodWeaver.Weave(ilGenerator);
            ilGenerator.EmitLoadArg(0);
            ilGenerator.Emit(OpCodes.Ldfld, contractFieldBuilder);
            ilGenerator.EmitLoadLocal(methodLocalBuilder);
            ctorInterceptionArgs = ArgumentType.GetConstructors()[0];

            Parameters.ForEach(1, (parameter, i) => {
                ilGenerator.EmitLoadArg(i);

                if (parameter.IsByRef)
                {
                    ilGenerator.Emit(OpCodes.Ldind_I4);
                }
            });

            ilGenerator.Emit(OpCodes.Newobj, ctorInterceptionArgs);
            ilGenerator.EmitStoreLocal(aspectArgLocalBuilder);

            return(aspectArgLocalBuilder);
        }
        public override LocalBuilder BuildArguments(ILGenerator ilGenerator)
        {
            LocalBuilder    propertyLocalBuilder          = null;
            FieldBuilder    contractFieldBuilder          = null;
            LocalBuilder    aspectArgLocalBuilder         = null;
            ConstructorInfo ctorInterceptionArgs          = null;
            AbstractAspectPropertyArgsWeaver methodWeaver = null;

            propertyLocalBuilder = LocalBuilderRepository.Declare(() => {
                return(ilGenerator.DeclareLocal(typeof(PropertyInfo)));
            });

            ctorInterceptionArgs  = ArgumentType.GetConstructors()[0];
            aspectArgLocalBuilder = ilGenerator.DeclareLocal(ArgumentType);
            contractFieldBuilder  = WeavingSettings.TypeDefinition.GetFieldBuilder(WeavingSettings.ContractType);
            methodWeaver          = new AspectArgsSetPropertyWeaver(Member, propertyLocalBuilder, aspectWeavingSettings);
            methodWeaver.Weave(ilGenerator);
            ilGenerator.EmitLoadArg(0);
            ilGenerator.Emit(OpCodes.Ldfld, contractFieldBuilder);
            ilGenerator.EmitLoadLocal(propertyLocalBuilder);
            ilGenerator.Emit(OpCodes.Ldsfld, BindingsDependency);
            ilGenerator.EmitLoadArg(1);
            ilGenerator.Emit(OpCodes.Newobj, ctorInterceptionArgs);
            ilGenerator.EmitStoreLocal(aspectArgLocalBuilder);

            return(aspectArgLocalBuilder);
        }