11using Microsoft . Extensions . DependencyInjection ;
2+ using Microsoft . Extensions . Options ;
23using Senparc . CO2NET . ApiBind ;
34using Senparc . CO2NET . Trace ;
45using System ;
@@ -22,18 +23,10 @@ public static class WebApiEngineExtensions
2223 /// <param name="docXmlPath">XML 文档文件夹路径,如果传入 null,则不自动生成 XML 说明文件</param>
2324 /// <param name="builder"></param>
2425 /// <param name="services"></param>
25- /// <param name="defaultRequestMethod">默认请求方式</param>
26- /// <param name="baseApiControllerType">全局 ApiController 的基类,默认为 ControllerBase</param>
27- /// <param name="showDetailApiLog"></param>
28- /// <param name="taskCount"></param>
29- /// <param name="additionalAttributes"></param>
30- /// <param name="buildXml">是否创建动态 API 对应的 XML 注释文件</param>
31- /// <param name="additionalAttributeFunc">是否复制自定义特性(AppBindAttribute 除外)</param>
32- /// <param name="forbiddenExternalAccess">是否允许外部访问,默认为 false,只允许本机访问相关 API</param>
33- public static void AddAndInitDynamicApi ( this IServiceCollection services , IMvcCoreBuilder builder ,
34- string docXmlPath , ApiRequestMethod defaultRequestMethod = ApiRequestMethod . Post , Type baseApiControllerType = null , int taskCount = 4 , bool showDetailApiLog = false , bool copyCustomAttributes = true , Func < MethodInfo , IEnumerable < CustomAttributeBuilder > > additionalAttributeFunc = null , bool forbiddenExternalAccess = true )
26+ /// <param name="options"> WebApiEngine 配置</param>
27+ public static void AddAndInitDynamicApi ( this IServiceCollection services , IMvcCoreBuilder builder , Action < WebApiEngineOptions > options = null )
3528 {
36- AddAndInitDynamicApi ( services , ( builder , null ) , docXmlPath , defaultRequestMethod , baseApiControllerType , taskCount , showDetailApiLog , copyCustomAttributes , additionalAttributeFunc , forbiddenExternalAccess ) ;
29+ AddAndInitDynamicApi ( services , ( builder , null ) , options ) ;
3730 }
3831
3932
@@ -43,17 +36,10 @@ public static void AddAndInitDynamicApi(this IServiceCollection services, IMvcCo
4336 /// <param name="docXmlPath">App_Data 文件夹路径</param>
4437 /// <param name="builder"></param>
4538 /// <param name="services"></param>
46- /// <param name="defaultRequestMethod">默认请求方式</param>
47- /// <param name="baseApiControllerType">全局 ApiController 的基类,默认为 ControllerBase</param>
48- /// <param name="showDetailApiLog"></param>
49- /// <param name="taskCount"></param>
50- /// <param name="additionalAttributes"></param>
51- /// <param name="additionalAttributeFunc">是否复制自定义特性(AppBindAttribute 除外)</param>
52- /// <param name="forbiddenExternalAccess">是否允许外部访问,默认为 false,只允许本机访问相关 API</param>
53- public static void AddAndInitDynamicApi ( this IServiceCollection services , IMvcBuilder builder ,
54- string docXmlPath , ApiRequestMethod defaultRequestMethod = ApiRequestMethod . Post , Type baseApiControllerType = null , int taskCount = 4 , bool showDetailApiLog = false , bool copyCustomAttributes = true , Func < MethodInfo , IEnumerable < CustomAttributeBuilder > > additionalAttributeFunc = null , bool forbiddenExternalAccess = true )
39+ /// <param name="options"> WebApiEngine 配置</param>
40+ public static void AddAndInitDynamicApi ( this IServiceCollection services , IMvcBuilder builder , Action < WebApiEngineOptions > options = null )
5541 {
56- AddAndInitDynamicApi ( services , ( null , builder ) , docXmlPath , defaultRequestMethod , baseApiControllerType , taskCount , showDetailApiLog , copyCustomAttributes , additionalAttributeFunc , forbiddenExternalAccess ) ;
42+ AddAndInitDynamicApi ( services , ( null , builder ) , options ) ;
5743 }
5844
5945 /// <summary>
@@ -62,25 +48,15 @@ public static void AddAndInitDynamicApi(this IServiceCollection services, IMvcBu
6248 /// <param name="docXmlPath">App_Data 文件夹路径</param>
6349 /// <param name="builder"></param>
6450 /// <param name="services"></param>
65- /// <param name="defaultRequestMethod">默认请求方式</param>
66- /// <param name="baseApiControllerType">全局 ApiController 的基类,默认为 ControllerBase</param>
67- /// <param name="showDetailApiLog"></param>
68- /// <param name="taskCount"></param>
69- /// <param name="additionalAttributes"></param>
70- /// <param name="additionalAttributeFunc">是否复制自定义特性(AppBindAttribute 除外)</param>
71- /// <param name="forbiddenExternalAccess">是否允许外部访问,默认为 false,只允许本机访问相关 API</param>
72- private static void AddAndInitDynamicApi ( this IServiceCollection services , ( IMvcCoreBuilder coreBuilder , IMvcBuilder builder ) builder ,
73- string docXmlPath , ApiRequestMethod defaultRequestMethod = ApiRequestMethod . Post , Type baseApiControllerType = null ,
74- int taskCount = 4 , bool showDetailApiLog = false , bool copyCustomAttributes = true , Func < MethodInfo , IEnumerable < CustomAttributeBuilder > > additionalAttributeFunc = null , bool forbiddenExternalAccess = true )
51+ /// <param name="options"> WebApiEngine 配置</param>
52+ private static void AddAndInitDynamicApi ( this IServiceCollection services ,
53+ ( IMvcCoreBuilder coreBuilder , IMvcBuilder builder ) builder ,
54+ Action < WebApiEngineOptions > options = null )
7555 {
76- _ = defaultRequestMethod != ApiRequestMethod . GlobalDefault ? true : throw new Exception ( $ "{ nameof ( defaultRequestMethod ) } 不能作为默认请求类型!") ;
77-
7856 services . AddScoped < FindApiService > ( ) ;
79- services . AddScoped ( s => new WebApiEngine ( docXmlPath ) ) ;
80-
81- WebApiEngine . AdditionalAttributeFunc = additionalAttributeFunc ;
57+ services . AddScoped ( s => new WebApiEngine ( options ) ) ;
8258
83- var webApiEngine = new WebApiEngine ( docXmlPath , defaultRequestMethod , baseApiControllerType , copyCustomAttributes , taskCount , showDetailApiLog , forbiddenExternalAccess ) ;
59+ var webApiEngine = new WebApiEngine ( options ) ;
8460
8561 bool preLoad = true ;
8662
@@ -90,7 +66,7 @@ private static void AddAndInitDynamicApi(this IServiceCollection services, (IMvc
9066 //确保目录存在
9167 if ( webApiEngine . BuildXml )
9268 {
93- webApiEngine . TryCreateDir ( docXmlPath ) ;
69+ webApiEngine . TryCreateDir ( webApiEngine . DocXmlPath ) ;
9470 }
9571
9672 var dt1 = SystemTime . Now ;
@@ -170,7 +146,7 @@ private static void AddAndInitDynamicApi(this IServiceCollection services, (IMvc
170146 webApiEngine . WriteLog ( new string ( '=' , 80 ) ) ;
171147 var totalApi = assemblyBuildStat . Values . Sum ( z => z . apiCount ) ;
172148 webApiEngine . WriteLog ( string . Format ( "{0,25} | {1,15}| {2,15} |{3,15}" , $ "Total", $ "API Count:{ totalApi } ", $ "Cost:{ totalCost } ms", $ "" ) ) ;
173- webApiEngine . WriteLog ( $ "Total Average Cost: { Math . Round ( totalCost / totalApi , 4 ) } ms \t \t Task Count: { taskCount } ") ;
149+ webApiEngine . WriteLog ( $ "Total Average Cost: { Math . Round ( totalCost / totalApi , 4 ) } ms \t \t Task Count: { webApiEngine . TaskCount } ") ;
174150 webApiEngine . WriteLog ( "" ) ;
175151
176152 #endregion
0 commit comments