/// <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); }
/// <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); }
///// <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); }
/// <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; }