@@ -11,43 +11,43 @@ public static class DashScopeServiceCollectionExtensions
1111 public static IKernelBuilder AddDashScopeChatCompletion (
1212 this IKernelBuilder builder ,
1313 string ? serviceId = null ,
14+ Action < DashScopeClientOptions > ? configureOptions = null ,
1415 Action < HttpClient > ? configureClient = null ,
1516 string configSectionPath = "dashscope" )
1617 {
1718 Func < IServiceProvider , object ? , DashScopeChatCompletionService > factory = ( serviceProvider , _ ) =>
1819 serviceProvider . GetRequiredService < DashScopeChatCompletionService > ( ) ;
1920
20- if ( configureClient == null )
21- {
22- builder . Services . AddHttpClient < DashScopeChatCompletionService > ( ) ;
23- }
24- else
25- {
26- builder . Services . AddHttpClient < DashScopeChatCompletionService > ( configureClient ) ;
27- }
21+ var optionsBuilder = builder . Services . AddOptions < DashScopeClientOptions > ( ) . BindConfiguration ( configSectionPath ) ;
22+ if ( configureOptions != null ) optionsBuilder . PostConfigure ( configureOptions ) ;
23+ 24+ var httpClientBuilder = configureClient == null
25+ ? builder . Services . AddHttpClient < DashScopeChatCompletionService > ( )
26+ : builder . Services . AddHttpClient < DashScopeChatCompletionService > ( configureClient ) ;
2827
29- builder . Services . AddOptions < DashScopeClientOptions > ( ) . BindConfiguration ( configSectionPath ) ;
3028 builder . Services . AddKeyedSingleton < IChatCompletionService > ( serviceId , factory ) ;
3129 return builder ;
3230 }
3331
3432 public static IKernelBuilder AddDashScopeChatCompletion < T > (
3533 this IKernelBuilder builder ,
34+ string ? modelId = null ,
35+ string ? apiKey = null ,
3636 string ? serviceId = null ,
37+ Action < DashScopeClientOptions > ? configureOptions = null ,
3738 Action < HttpClient > ? configureClient = null ,
3839 string configSectionPath = "dashscope" ) where T : class
3940 {
40- if ( ! builder . Services . Any ( s => s . ServiceType == typeof ( IConfiguration ) ) )
41+ builder . Services . AddConfiguration < T > ( ) ;
42+ 43+ void AggConfigureOptions ( DashScopeClientOptions options )
4144 {
42- IConfiguration config = new ConfigurationBuilder ( )
43- . SetBasePath ( Directory . GetCurrentDirectory ( ) )
44- . AddEnvironmentVariables ( )
45- . AddJsonFile ( "appsettings.json" , true )
46- . AddUserSecrets < T > ( )
47- . Build ( ) ;
48- builder . Services . TryAddSingleton ( config ) ;
45+ if ( ! string . IsNullOrEmpty ( modelId ) ) options . ModelId = modelId ;
46+ if ( ! string . IsNullOrEmpty ( apiKey ) ) options . ApiKey = apiKey ;
47+ configureOptions ? . Invoke ( options ) ;
4948 }
50- return builder . AddDashScopeChatCompletion ( serviceId , configureClient , configSectionPath ) ;
49+ 50+ return builder . AddDashScopeChatCompletion ( serviceId , AggConfigureOptions , configureClient , configSectionPath ) ;
5151 }
5252
5353 public static IKernelBuilder AddDashScopeChatCompletion (
@@ -69,4 +69,20 @@ public static IKernelBuilder AddDashScopeChatCompletion(
6969 builder . Services . AddKeyedSingleton < IChatCompletionService > ( serviceId , factory ) ;
7070 return builder ;
7171 }
72+ 73+ private static IServiceCollection AddConfiguration < T > ( this IServiceCollection services ) where T : class
74+ {
75+ if ( ! services . Any ( s => s . ServiceType == typeof ( IConfiguration ) ) )
76+ {
77+ IConfiguration config = new ConfigurationBuilder ( )
78+ . SetBasePath ( Directory . GetCurrentDirectory ( ) )
79+ . AddEnvironmentVariables ( )
80+ . AddJsonFile ( "appsettings.json" , true )
81+ . AddUserSecrets < T > ( )
82+ . Build ( ) ;
83+ services . TryAddSingleton ( config ) ;
84+ }
85+ 86+ return services ;
87+ }
7288}
0 commit comments