Пример #1
0
        /// <summary>
        /// 拦截方法的调用
        /// </summary>
        /// <param name="target">接口的实例</param>
        /// <param name="method">接口的方法</param>
        /// <param name="parameters">接口的参数集合</param>
        /// <returns></returns>
        public object Intercept(object target, MethodInfo method, object[] parameters)
        {
            var apiActionDescripter = this.GetApiActionDescriptor(method, parameters);
            var apiTask             = ApiTask.CreateInstance(this.ApiConfig, apiActionDescripter);

            if (apiActionDescripter.Return.IsITaskDefinition == true)
            {
                return(apiTask);
            }
            else
            {
                return(apiTask.InvokeAsync());
            }
        }
Пример #2
0
        /// <summary>
        /// 拦截方法的调用
        /// </summary>
        /// <param name="target">接口的实例</param>
        /// <param name="method">接口的方法</param>
        /// <param name="parameters">接口的参数集合</param>
        /// <returns></returns>
        public object Intercept(object target, MethodInfo method, object[] parameters)
        {
            if (method.Equals(disposeMethod) == true)
            {
                this.httpApiConfig.Dispose();
                return(null);
            }

            var apiActionDescripter = this.GetApiActionDescriptor(method, parameters);
            var apiTask             = ApiTask.CreateInstance(this.httpApiConfig, apiActionDescripter);

            if (apiActionDescripter.Return.GenericType == typeof(ITask <>))
            {
                return(apiTask);
            }
            else
            {
                return(apiTask.InvokeAsync());
            }
        }
Пример #3
0
        /// <summary>
        /// 生成ApiReturnDescriptor
        /// </summary>
        /// <param name="method">方法信息</param>
        /// <returns></returns>
        private static ApiReturnDescriptor GetReturnDescriptor(MethodInfo method)
        {
            var returnAttribute = method.FindDeclaringAttribute <IApiReturnAttribute>(true);

            if (returnAttribute == null)
            {
                returnAttribute = new AutoReturnAttribute();
            }

            var dataType   = method.ReturnType.GetGenericArguments().FirstOrDefault();
            var descriptor = new ApiReturnDescriptor
            {
                Attribute   = returnAttribute,
                ReturnType  = method.ReturnType,
                GenericType = method.ReturnType.GetGenericTypeDefinition(),
                DataType    = dataType,
                ITaskCtor   = ApiTask.GetConstructor(dataType),
            };

            return(descriptor);
        }
Пример #4
0
        /// <summary>
        /// 生成ApiReturnDescriptor
        /// </summary>
        /// <param name="method">方法信息</param>
        /// <returns></returns>
        private static ApiReturnDescriptor GetReturnDescriptor(this MethodInfo method)
        {
            var returnAttribute = method.FindDeclaringAttribute <IApiReturnAttribute>(true);

            if (returnAttribute == null)
            {
                returnAttribute = new AutoReturnAttribute();
            }

            var dataType   = method.ReturnType.GetGenericArguments().FirstOrDefault() ?? typeof(object);
            var descriptor = new ApiReturnDescriptor
            {
                Attribute         = returnAttribute,
                ReturnType        = method.ReturnType,
                DataType          = dataType,
                IsITaskDefinition = method.ReturnType.IsGenericParameter && method.ReturnType.GetGenericTypeDefinition() == typeof(ITask <>),
                ITaskCtor         = ApiTask.GetITaskConstructor(dataType),
            };

            return(descriptor);
        }