3
3
using Microsoft . Extensions . DependencyInjection ;
4
4
using Microsoft . Extensions . Options ;
5
5
using Microsoft . SemanticKernel ;
6
+
6
7
// ReSharper disable UnusedMember.Global
7
8
// ReSharper disable MemberCanBePrivate.Global
8
9
@@ -18,39 +19,39 @@ public static class Extensions
18
19
public static IKernelBuilder AddAssemblyAIPlugin (
19
20
this IKernelBuilder builder
20
21
) => AddAssemblyAIPlugin ( builder , "AssemblyAI" ) ;
21
-
22
+
22
23
/// <summary>
23
24
/// Configure the AssemblyAI plugins using the specified configuration section path.
24
25
/// </summary>
25
26
/// <param name="builder"></param>
26
27
/// <param name="configSectionPath">The path of the configuration section to bind options to</param>
27
28
/// <returns></returns>
28
29
public static IKernelBuilder AddAssemblyAIPlugin (
29
- this IKernelBuilder builder ,
30
+ this IKernelBuilder builder ,
30
31
string configSectionPath
31
32
)
32
33
{
33
34
var services = builder . Services ;
34
- var optionsBuilder = services . AddOptions < AssemblyAIPluginsOptions > ( ) ;
35
+ var optionsBuilder = services . AddOptions < AssemblyAIPluginOptions > ( ) ;
35
36
optionsBuilder . BindConfiguration ( configSectionPath ) ;
36
37
ValidateOptions ( optionsBuilder ) ;
37
38
AddPlugin ( builder ) ;
38
39
return builder ;
39
40
}
40
-
41
+
41
42
/// <summary>
42
43
/// Configure the AssemblyAI plugins using the specified configuration section path.
43
44
/// </summary>
44
45
/// <param name="builder"></param>
45
46
/// <param name="configuration">The configuration to bind options to</param>
46
47
/// <returns></returns>
47
48
public static IKernelBuilder AddAssemblyAIPlugin (
48
- this IKernelBuilder builder ,
49
+ this IKernelBuilder builder ,
49
50
IConfiguration configuration
50
51
)
51
52
{
52
53
var services = builder . Services ;
53
- var optionsBuilder = services . AddOptions < AssemblyAIPluginsOptions > ( ) ;
54
+ var optionsBuilder = services . AddOptions < AssemblyAIPluginOptions > ( ) ;
54
55
optionsBuilder . Bind ( configuration ) ;
55
56
ValidateOptions ( optionsBuilder ) ;
56
57
AddPlugin ( builder ) ;
@@ -64,12 +65,12 @@ IConfiguration configuration
64
65
/// <param name="options">Options to configure plugin with</param>
65
66
/// <returns></returns>
66
67
public static IKernelBuilder AddAssemblyAIPlugin (
67
- this IKernelBuilder builder ,
68
- AssemblyAIPluginsOptions options
68
+ this IKernelBuilder builder ,
69
+ AssemblyAIPluginOptions options
69
70
)
70
71
{
71
72
var services = builder . Services ;
72
- var optionsBuilder = services . AddOptions < AssemblyAIPluginsOptions > ( ) ;
73
+ var optionsBuilder = services . AddOptions < AssemblyAIPluginOptions > ( ) ;
73
74
optionsBuilder . Configure ( optionsToConfigure =>
74
75
{
75
76
optionsToConfigure . ApiKey = options . ApiKey ;
@@ -79,7 +80,7 @@ AssemblyAIPluginsOptions options
79
80
AddPlugin ( builder ) ;
80
81
return builder ;
81
82
}
82
-
83
+
83
84
/// <summary>
84
85
/// Configure the AssemblyAI plugins using the specified options.
85
86
/// </summary>
@@ -88,11 +89,11 @@ AssemblyAIPluginsOptions options
88
89
/// <returns></returns>
89
90
public static IKernelBuilder AddAssemblyAIPlugin (
90
91
this IKernelBuilder builder ,
91
- Action < AssemblyAIPluginsOptions > configureOptions
92
+ Action < AssemblyAIPluginOptions > configureOptions
92
93
)
93
94
{
94
95
var services = builder . Services ;
95
- var optionsBuilder = services . AddOptions < AssemblyAIPluginsOptions > ( ) ;
96
+ var optionsBuilder = services . AddOptions < AssemblyAIPluginOptions > ( ) ;
96
97
optionsBuilder . Configure ( configureOptions ) ;
97
98
ValidateOptions ( optionsBuilder ) ;
98
99
AddPlugin ( builder ) ;
@@ -107,28 +108,33 @@ Action<AssemblyAIPluginsOptions> configureOptions
107
108
/// <returns></returns>
108
109
public static IKernelBuilder AddAssemblyAIPlugin (
109
110
this IKernelBuilder builder ,
110
- Action < IServiceProvider , AssemblyAIPluginsOptions > configureOptions
111
+ Action < IServiceProvider , AssemblyAIPluginOptions > configureOptions
111
112
)
112
113
{
113
114
var services = builder . Services ;
114
- var optionsBuilder = services . AddOptions < AssemblyAIPluginsOptions > ( ) ;
115
+ var optionsBuilder = services . AddOptions < AssemblyAIPluginOptions > ( ) ;
115
116
optionsBuilder . Configure < IServiceProvider > ( ( options , provider ) => configureOptions ( provider , options ) ) ;
116
117
ValidateOptions ( optionsBuilder ) ;
117
118
AddPlugin ( builder ) ;
118
119
return builder ;
119
120
}
120
121
121
- private static void ValidateOptions ( OptionsBuilder < AssemblyAIPluginsOptions > optionsBuilder )
122
+ private static void ValidateOptions ( OptionsBuilder < AssemblyAIPluginOptions > optionsBuilder )
122
123
{
123
124
optionsBuilder . Validate (
124
125
options => ! string . IsNullOrEmpty ( options . ApiKey ) ,
125
126
"AssemblyAI:ApiKey must be configured."
126
127
) ;
127
128
}
128
-
129
+
129
130
private static void AddPlugin ( IKernelBuilder builder )
130
131
{
131
- builder . Plugins . AddFromType < AssemblyAIPlugin > ( AssemblyAIPlugin . PluginName ) ;
132
+ using ( var sp = builder . Services . BuildServiceProvider ( ) )
133
+ {
134
+ var config = sp . GetRequiredService < IOptions < AssemblyAIPluginOptions > > ( ) . Value ;
135
+ var pluginName = string . IsNullOrEmpty ( config . PluginName ) ? null : config . PluginName ;
136
+ builder . Plugins . AddFromType < AssemblyAIPlugin > ( pluginName ) ;
137
+ }
132
138
}
133
139
}
134
140
}
0 commit comments