Пример #1
0
 protected virtual bool ShoudlLog(MemberInfo m, out IGetter getter)
 {
     getter = null;
     ///
     /// Check if ToLog annotation exists
     ///
     if (!Attribute.IsDefined(m, typeof(ToLogAttribute)))
     {
         return(false);
     }
     ///
     /// Check if is a field or parameterless method
     ///
     if (m.MemberType == MemberTypes.Field)
     {
         getter = new GetterField((FieldInfo)m);
         return(true);
     }
     if (m.MemberType == MemberTypes.Method)
     {
         MethodInfo mi = (MethodInfo)m;
         if (mi.GetParameters().Length == 0)
         {
             getter = new GetterMethod((MethodInfo)m);
             return(true);
         }
     }
     return(false);
 }
        /// <summary>
        /// Validate if that member m should be logged, i.e. it must have a ToLog annotation
        /// and be a field or a parameterless method.
        /// Also it may return an instance of GetterField or GetterMethod.
        /// </summary>
        protected virtual bool ShouldLog(MemberInfo m, out IGetter getter)
        {
            getter = null;

            /**
             * Check if it is annotated with ToLog
             */
            if (!Attribute.IsDefined(m, typeof(ToLogAttribute)))
            {
                return(false);
            }

            /**
             * Check if it is a Field
             */
            if (m.MemberType == MemberTypes.Field)
            {
                getter = new GetterField((FieldInfo)m);
                return(true);
            }

            /**
             * Check if it is a parameterless method
             */
            if (m.MemberType == MemberTypes.Method && (m as MethodInfo).GetParameters().Length == 0)
            {
                getter = new GetterMethod((MethodInfo)m);
                return(true);
            }
            return(false);
        }
Пример #3
0
        protected override bool ShoudlLog(MemberInfo m, out IGetter getter)
        {
            getter = null;
            ///
            /// Check if ToLog annotation exists
            ///
            ToLogAttribute attr = (ToLogAttribute)m.GetCustomAttribute(typeof(ToLogAttribute));

            if (attr == null)
            {
                return(false);
            }
            ///
            /// Check if is a field or parameterless method
            ///
            if (m.MemberType == MemberTypes.Field)
            {
                getter = new GetterField((FieldInfo)m);
            }
            if (m.MemberType == MemberTypes.Method)
            {
                MethodInfo mi = (MethodInfo)m;
                if (mi.GetParameters().Length == 0)
                {
                    getter = new GetterMethod((MethodInfo)m);
                }
            }
            if (getter == null)
            {
                return(false);
            }
            if (attr.FormatterType != null)
            {
                getter = new GetterFormatter(getter, attr.FormatterType, attr.CtorArgs);
            }
            return(true);
        }
Пример #4
0
    static List <IGetter> CheckMembersOf(Type klass)
    {
        List <IGetter> ms;

        if (cache.TryGetValue(klass, out ms))
        {
            return(ms);
        }
        ms = new List <IGetter>();
        foreach (FieldInfo f in klass.GetFields())
        {
            if (CheckToLog(f))
            {
                IGetter getter = new GetterField(f);
                ms.Add(CheckToFormatter(f, getter));
            }
        }
        foreach (PropertyInfo p in klass.GetProperties())
        {
            if (CheckToLog(p))
            {
                IGetter getter = new GetterProperty(p);
                ms.Add(CheckToFormatter(p, getter));
            }
        }

        /*
         * foreach (MethodInfo m in klass.GetMethods()) {
         *  if(m.GetParameters().Length == 0 && m.ReturnType != typeof(void)) {
         *      ms.Add(new GetterMethod(m));
         *  }
         * }*/

        cache.Add(klass, ms); // cache[klass] = ms
        return(ms);
    }