Add() public method

public Add ( LocalBuilder localBuilder ) : void
localBuilder System.Reflection.Emit.LocalBuilder
return void
Exemplo n.º 1
0
        public override void Weave(ILGenerator ilGenerator)
        {
            FieldBuilder contractFieldBuilder = null;
            var          declaredLocalBuilder = ilGenerator.DeclareLocal(ArgumentType);
            var          ctorInterceptionArgs = ArgumentType.GetConstructors()[0];
            var          argsLocalBuilder     = LocalBuilderRepository.Get(previousAspectArgType);
            var          methodPropoertyInfo  = previousAspectArgType.GetProperty("Method");

            LocalBuilderRepository.Add(declaredLocalBuilder);
            contractFieldBuilder = WeavingSettings.TypeDefinition.GetFieldBuilder(WeavingSettings.ContractType);
            ilGenerator.EmitLoadArg(0);
            ilGenerator.Emit(OpCodes.Ldfld, contractFieldBuilder);
            ilGenerator.EmitLoadLocal(argsLocalBuilder);
            ilGenerator.Emit(OpCodes.Callvirt, methodPropoertyInfo.GetGetMethod());
            ilGenerator.Emit(OpCodes.Ldsfld, BindingsDependency);

            Parameters.ForEach(1, (parameter, i) => {
                var property = previousAspectArgType.GetProperty("Arg{0}".Fmt(i));

                ilGenerator.EmitLoadLocal(argsLocalBuilder);
                ilGenerator.Emit(OpCodes.Callvirt, property.GetGetMethod());
            });

            ilGenerator.Emit(OpCodes.Newobj, ctorInterceptionArgs);
            ilGenerator.EmitStoreLocal(declaredLocalBuilder);
        }
        public override void Weave(ILGenerator ilGenerator)
        {
            var localBuilder = BuildArguments(ilGenerator);

            LocalBuilderRepository.Add(localBuilder);
        }