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