@@ -47,12 +47,11 @@ public ApiInterceptor(HttpApiConfig httpApiConfig)
4747 /// <returns></returns>
4848 public virtual object Intercept ( object target , MethodInfo method , object [ ] parameters )
4949 {
50+ var httpApi = target as IHttpApi ;
5051 var descriptor = this . GetApiActionDescriptor ( method , parameters ) ;
51- var apiTask = descriptor . Return . DataType . ITaskFactory . Invoke ( ) as ApiTask ;
5252
53- apiTask . HttpApi = target as IHttpApi ;
54- apiTask . HttpApiConfig = this . HttpApiConfig ;
55- apiTask . ApiActionDescriptor = descriptor ;
53+ var apiTask = descriptor . Return . DataType . ITaskFactory . Invoke ( ) as ApiTask ;
54+ apiTask . ContextFactory = ( ) => this . CreateApiActionContext ( httpApi , descriptor ) ;
5655
5756 if ( descriptor . Return . IsITaskDefinition == false )
5857 {
@@ -66,6 +65,7 @@ public virtual object Intercept(object target, MethodInfo method, object[] param
6665
6766 /// <summary>
6867 /// 获取api的描述
68+ /// 默认实现使用了缓存
6969 /// </summary>
7070 /// <param name="method">接口的方法</param>
7171 /// <param name="parameters">参数值集合</param>
@@ -75,6 +75,17 @@ protected virtual ApiActionDescriptor GetApiActionDescriptor(MethodInfo method,
7575 return descriptorCache . GetOrAdd ( method , m => new ApiActionDescriptor ( m ) ) . Clone ( parameters ) ;
7676 }
7777
78+ /// <summary>
79+ /// 返回创建ApiActionContext新实例
80+ /// </summary>
81+ /// <param name="httpApi">httpApi代理类实例</param>
82+ /// <param name="apiActionDescriptor">api的描述</param>
83+ /// <returns></returns>
84+ protected virtual ApiActionContext CreateApiActionContext ( IHttpApi httpApi , ApiActionDescriptor apiActionDescriptor )
85+ {
86+ return new ApiActionContext ( httpApi , this . HttpApiConfig , apiActionDescriptor ) ;
87+ }
88+
7889 /// <summary>
7990 /// 释放资源
8091 /// </summary>
0 commit comments