예제 #1
0
        private static bool HandleTypeAttribute(HandleClassAttributeArgs args)
        {
            var attributeTypeName = args.CustomAttribute.AttributeType.FullName;

            Globals.Loggers.File.Trace("Handling attribute {0}.", attributeTypeName);

            bool result = false;

            if (args.ClassAttributeNames.Contains(attributeTypeName))
            {
                foreach (var methodDef in args.TypeDefinition.Methods)
                {
                    Globals.Loggers.File.Debug("Handling method {0}.", methodDef.Name);

                    var processor          = methodDef.Body.GetILProcessor();
                    var instructionBuilder = new InstructionBuilders.ClassAttributeBase(processor, args.CustomAttribute);
                    if (instructionBuilder.TryInject())
                    {
                        Globals.Loggers.Global.Info("Attribute {0} logic injected into {1}.{2} method.",
                                                    args.CustomAttribute.AttributeType.FullName, args.TypeDefinition.FullName, methodDef.Name);
                    }
                }
                args.TypeDefinition.CustomAttributes.Remove(args.CustomAttribute);
                result = true;
            }
            else
            {
                Globals.Loggers.File.Trace("Attribute is not inheritor of ClassAttributeBase.");
                result = false;
            }
            return(result);
        }
예제 #2
0
        private static bool HandleTypeAttribute(HandleClassAttributeArgs args)
        {
            var attributeTypeName = args.CustomAttribute.AttributeType.FullName;
            Globals.Loggers.File.Trace("Handling attribute {0}.", attributeTypeName);

            bool result = false;
            if (args.ClassAttributeNames.Contains(attributeTypeName))
            {
                foreach (var methodDef in args.TypeDefinition.Methods)
                {
                    Globals.Loggers.File.Debug("Handling method {0}.", methodDef.Name);

                    var processor = methodDef.Body.GetILProcessor();
                    var instructionBuilder = new InstructionBuilders.ClassAttributeBase(processor, args.CustomAttribute);
                    if (instructionBuilder.TryInject())
                    {
                        Globals.Loggers.Global.Info("Attribute {0} logic injected into {1}.{2} method.",
                            args.CustomAttribute.AttributeType.FullName, args.TypeDefinition.FullName, methodDef.Name);
                    }
                }
                args.TypeDefinition.CustomAttributes.Remove(args.CustomAttribute);
                result = true;
            }
            else
            {
                Globals.Loggers.File.Trace("Attribute is not inheritor of ClassAttributeBase.");
                result = false;
            }
            return result;
        }
예제 #3
0
        static void HandleType(HandleTypeArgs args)
        {
            Globals.Loggers.File.Trace("Handling {0} type.", args.TypeDefinition.FullName);
            if (args.TypeDefinition.HasMethods)
            {
                if (args.TypeDefinition.HasCustomAttributes)
                {
                    Globals.Loggers.File.Trace("Handling type custom attributes.");
                    for (var i = 0; i < args.TypeDefinition.CustomAttributes.Count; i++)
                    {
                        var handleArgs = new HandleClassAttributeArgs
                        {
                            ClassAttributeNames = args.ClassAttributeNames,
                            CustomAttribute     = args.TypeDefinition.CustomAttributes[i],
                            TypeDefinition      = args.TypeDefinition
                        };

                        if (HandleTypeAttribute(handleArgs))
                        {
                            i--;
                        }
                    }
                }
                else
                {
                    Globals.Loggers.File.Trace("Type does not has custom attributes.");
                }

                Globals.Loggers.File.Trace("Handling methods.");
                for (var i = 0; i < args.TypeDefinition.Methods.Count; i++)
                {
                    var handleArgs = new HandleMethodArgs
                    {
                        MethodAttributeNames = args.MethodAttributeNames,
                        MethodDefinition     = args.TypeDefinition.Methods[i]
                    };
                    HandleMethod(handleArgs);
                }
            }
            else
            {
                Globals.Loggers.File.Trace("Type does not has methods.");
            }
        }
예제 #4
0
        static void HandleType(HandleTypeArgs args)
        {
            Globals.Loggers.File.Trace("Handling {0} type.", args.TypeDefinition.FullName);
            if (args.TypeDefinition.HasMethods)
            {
                if (args.TypeDefinition.HasCustomAttributes)
                {
                    Globals.Loggers.File.Trace("Handling type custom attributes.");
                    for (var i = 0; i < args.TypeDefinition.CustomAttributes.Count; i++ )
                    {
                        var handleArgs = new HandleClassAttributeArgs
                        {
                            ClassAttributeNames = args.ClassAttributeNames,
                            CustomAttribute = args.TypeDefinition.CustomAttributes[i],
                            TypeDefinition = args.TypeDefinition
                        };

                        if (HandleTypeAttribute(handleArgs))
                        {
                            i--;
                        }
                    }
                }
                else
                {
                    Globals.Loggers.File.Trace("Type does not has custom attributes.");
                }

                Globals.Loggers.File.Trace("Handling methods.");
                for (var i = 0; i < args.TypeDefinition.Methods.Count; i++)
                {
                    var handleArgs = new HandleMethodArgs
                    {
                        MethodAttributeNames = args.MethodAttributeNames,
                        MethodDefinition = args.TypeDefinition.Methods[i]
                    };
                    HandleMethod(handleArgs);
                }
            }
            else
            {
                Globals.Loggers.File.Trace("Type does not has methods.");
            }
        }