public virtual void Weave(ILGenerator ilGenerator)
        {
            MethodInfo             mapGenericMethod     = null;
            Func <int, MethodInfo> getMappingArgsMethod = null;
            var argsImplLocalBuilder = localBuilderRepository.Get(aspectArgumentType);

            if (mappingParameters.Length > 0)
            {
                getMappingArgsMethod = argumentsSettings.IsFunction() ?
                                       aspectWeavingSettings.AspectArgsMapper.GetFunctionMappingArgs :
                                       (Func <int, MethodInfo>)aspectWeavingSettings.AspectArgsMapper.GetActionMappingArgs;

                mapGenericMethod = getMappingArgsMethod(mappingParameters.Length);
                mapGenericMethod = mapGenericMethod.MakeGenericMethod(mappingParameters);

                ilGenerator.EmitLoadLocal(argsImplLocalBuilder);
                WeaveAspectArg(ilGenerator);
                ilGenerator.Emit(OpCodes.Call, mapGenericMethod);
            }
        }