/// <summary>
        /// 反射方法执行
        /// </summary>
        /// <param name="method">方法</param>
        /// <returns>方法成员对象</returns>
        /// <example>
        /// <code lang="c#">
        /// <![CDATA[
        ///     public class UserInfo{
        ///         public int ID{get;set;}
        ///
        ///         public string Name{get;set;}
        ///
        ///         public void Print(DateTime dt){
        ///             //输出
        ///         }
        ///     }
        ///     UserInfo user= new UserInfo();
        ///     user.ID=1;
        ///
        ///     MethodBase method=typeof(UserInfo).GetMethod("Print");
        ///
        ///     var member=Reflector.GetMethod(method);
        ///
        ///     member.Invoke(user,DateTime.Now);
        ///
        /// ]]>
        /// </code>
        /// </example>
        public static IMethodInvoker GetMethod(MethodBase method)
        {
            if (method == null)
            {
                throw new ArgumentNullException("method");
            }

            IMethodInvoker invoker;

            if (_methodCache.TryGetValue(method, out invoker))
            {
                return(invoker);
            }

            lock (_methodCache)
            {
                if (!_methodCache.TryGetValue(method, out invoker))
                {
                    invoker = _refFactory.GetMethodInvoker(method);
                    _methodCache[method] = invoker;
                }
            }

            return(invoker);
        }
示例#2
0
        public static IMethodInvoker GetMethodInvoker(MethodBase method)
        {
            IMethodInvoker invoker;

            if (_methodCache.TryGetValue(method, out invoker))
            {
                return(invoker);
            }

            lock (_methodCache)
            {
                if (!_methodCache.TryGetValue(method, out invoker))
                {
                    invoker = _refFactory.GetMethodInvoker(method);
                    _methodCache[method] = invoker;
                }
            }

            return(invoker);
        }