Exemplo n.º 1
0
        /// <summary>
        /// 创建ApiTaskOf(T)的实例
        /// </summary>
        /// <param name="httpApiConfig">http接口配置</param>
        /// <param name="apiActionDescriptor">api描述</param>
        /// <returns></returns>
        public static ApiTask CreateInstance(HttpApiConfig httpApiConfig, ApiActionDescriptor apiActionDescriptor)
        {
            // var instance = new ApiTask<TResult>(httpApiConfig, apiActionDescriptor);
            var ctor = apiActionDescriptor.Return.ITaskCtor;

            return(ctor.Invoke(new object[] { httpApiConfig, apiActionDescriptor }) as ApiTask);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 生成ApiActionDescriptor
        /// </summary>
        /// <param name="invocation">拦截内容</param>
        /// <returns></returns>
        private static ApiActionDescriptor GetActionDescriptor(IInvocation invocation)
        {
            var method     = invocation.Method;
            var descriptor = new ApiActionDescriptor
            {
                Name           = method.Name,
                ReturnTaskType = method.ReturnType,
                ReturnDataType = method.ReturnType.GetGenericArguments().FirstOrDefault(),
                Attributes     = method.GetCustomAttributes <ApiActionAttribute>(true).ToArray(),
                Parameters     = method.GetParameters().Select((p, i) => GetParameterDescriptor(p, i)).ToArray()
            };

            return(descriptor);
        }
Exemplo n.º 3
0
        ///// <summary>
        ///// 获取ITaskOf(dataType)的构造器
        ///// </summary>
        ///// <param name="dataType">泛型参数类型</param>
        ///// <returns></returns>
        //public static ConstructorInfo GetITaskConstructor(Type dataType)
        //{
        //    return typeof(ApiTaskOf<>)
        //        .MakeGenericType(dataType)
        //        .GetConstructor(new[] { typeof(HttpApiConfig), typeof(ApiActionDescriptor) });
        //}

        /// <summary>
        /// 创建ApiTaskOf(T)的实例
        /// </summary>
        /// <param name="httpApiConfig">http接口配置</param>
        /// <param name="apiActionDescriptor">api描述</param>
        /// <returns></returns>
        public static object CreateInstance(HttpApiConfig httpApiConfig, ApiActionDescriptor apiActionDescriptor)
        {
            var context = new ApiActionContext
            {
                ApiActionDescriptor = apiActionDescriptor,
                HttpApiConfig       = httpApiConfig,
                RequestMessage      = new HttpApiRequestMessage {
                    RequestUri = httpApiConfig.HttpHost
                },
                ResponseMessage = null,
                Exception       = null,
                Result          = null
            };

            context.PrepareRequestAsync();

            context.ExecRequestAsync();

            return(context.Result);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Api请求的异步任务
 /// </summary>
 /// <param name="httpApiConfig">http接口配置</param>
 /// <param name="apiActionDescriptor">api描述</param>
 public ApiTaskOf(HttpApiConfig httpApiConfig, ApiActionDescriptor apiActionDescriptor)
 {
     this.httpApiConfig       = httpApiConfig;
     this.apiActionDescriptor = apiActionDescriptor;
 }