Skip to content

Commit dfdb6e6

Browse files
authored
[csharp][generichost] Add partial methods to host configuration (OpenAPITools#24343)
* remove redundant property * add partials
1 parent c7c0bf7 commit dfdb6e6

150 files changed

Lines changed: 1755 additions & 351 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/openapi-generator/src/main/resources/csharp/libraries/generichost/HostConfiguration.mustache

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace {{packageName}}.{{clientPackage}}
2222
/// <summary>
2323
/// Provides hosting configuration for {{packageName}}
2424
/// </summary>
25-
{{>visibility}} class HostConfiguration
25+
{{>visibility}} partial class HostConfiguration
2626
{
2727
private readonly IServiceCollection _services;
2828
private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions();
@@ -81,6 +81,7 @@ namespace {{packageName}}.{{clientPackage}}
8181
{{/useSourceGeneration}}
8282
_services.AddSingleton<IApiFactory, ApiFactory>();{{#apiInfo}}{{#apis}}
8383
_services.AddSingleton<{{classname}}Events>();{{/apis}}{{/apiInfo}}
84+
OnHostConfigurationCreated();
8485
}
8586

8687
/// <summary>
@@ -125,17 +126,46 @@ namespace {{packageName}}.{{clientPackage}}
125126
126127
List<IHttpClientBuilder> builders = new List<IHttpClientBuilder>();
127128
128-
{{#apiInfo}}{{#apis}}builders.Add(_services.AddHttpClient<{{interfacePrefix}}{{classname}}, {{classname}}>("{{packageName}}.{{apiPackage}}.{{interfacePrefix}}{{classname}}", client));
129-
{{/apis}}{{/apiInfo}}
130-
if (builder != null)
131-
foreach (IHttpClientBuilder instance in builders)
132-
builder(instance);
129+
{{#apiInfo}}
130+
{{#apis}}
131+
builders.Add(_services.AddHttpClient<{{interfacePrefix}}{{classname}}, {{classname}}>("{{packageName}}.{{apiPackage}}.{{interfacePrefix}}{{classname}}", client));
132+
{{/apis}}
133+
{{/apiInfo}}
134+
135+
foreach (IHttpClientBuilder instance in builders)
136+
{
137+
OnAdd{{apiName}}HttpClientBuilder(instance);
138+
builder?.Invoke(instance);
139+
}
133140

134141
HttpClientsAdded = true;
135142

136143
return this;
137144
}
138145

146+
/// <summary>
147+
/// Applies configuration to each HttpClient after registration.
148+
/// Implement this partial method in a separate file to provide custom defaults;
149+
/// the caller's <c>builder</c> action runs after.
150+
/// </summary>
151+
/// <param name="builder"></param>
152+
partial void OnAdd{{apiName}}HttpClientBuilder(IHttpClientBuilder builder);
153+
154+
/// <summary>
155+
/// Called at the end of the constructor after all JSON converters and services are registered.
156+
/// Implement this partial method to further configure <c>_jsonOptions</c> or register additional singletons via <c>_services</c>.
157+
/// </summary>
158+
partial void OnHostConfigurationCreated();
159+
160+
/// <summary>
161+
/// Called after all services have been registered.
162+
/// Implement this partial method to register additional services.
163+
/// </summary>
164+
/// <param name="services"></param>
165+
partial void OnServicesAdded(IServiceCollection services);
166+
167+
internal void NotifyServicesAdded(IServiceCollection services) => OnServicesAdded(services);
168+
139169
/// <summary>
140170
/// Configures the JsonSerializerSettings
141171
/// </summary>

modules/openapi-generator/src/main/resources/csharp/libraries/generichost/IHostBuilderExtensions.mustache

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ namespace {{packageName}}.Extensions
3838
/// </summary>
3939
/// <param name="builder"></param>
4040
/// <param name="options"></param>
41-
public static IHostBuilder Configure{{apiName}}(this IHostBuilder builder, Action<HostBuilderContext, HostConfiguration> options)
41+
public static IHostBuilder Configure{{apiName}}(this IHostBuilder builder, Action<HostBuilderContext, HostConfiguration>{{nrt?}} options = null)
4242
{
4343
builder.ConfigureServices((context, services) =>
4444
{
4545
HostConfiguration config = new HostConfiguration(services);
4646
47-
options(context, config);
47+
options?.Invoke(context, config);
4848
4949
IServiceCollectionExtensions.Add{{apiName}}(services, config);
5050
});

modules/openapi-generator/src/main/resources/csharp/libraries/generichost/IServiceCollectionExtensions.mustache

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ namespace {{packageName}}.Extensions
6464
s => s.GetRequiredService(typeof(RateLimitProvider<>).MakeGenericType(tokenType)));
6565
}
6666
}
67+
68+
host.NotifyServicesAdded(services);
6769
}
6870
}
6971
}

samples/client/petstore/csharp/generichost/latest/ComposedEnum/src/Org.OpenAPITools/Client/HostConfiguration.cs

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace Org.OpenAPITools.Client
2424
/// <summary>
2525
/// Provides hosting configuration for Org.OpenAPITools
2626
/// </summary>
27-
public class HostConfiguration
27+
public partial class HostConfiguration
2828
{
2929
private readonly IServiceCollection _services;
3030
private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions();
@@ -52,6 +52,7 @@ public HostConfiguration(IServiceCollection services)
5252
JsonSerializerOptionsProvider jsonSerializerOptionsProvider = new(_jsonOptions);
5353
_services.AddSingleton(jsonSerializerOptionsProvider);
5454
_services.AddSingleton<IApiFactory, ApiFactory>();
55+
OnHostConfigurationCreated();
5556
}
5657

5758
/// <summary>
@@ -96,16 +97,41 @@ public HostConfiguration AddApiHttpClients(
9697

9798
List<IHttpClientBuilder> builders = new List<IHttpClientBuilder>();
9899

99-
100-
if (builder != null)
101-
foreach (IHttpClientBuilder instance in builders)
102-
builder(instance);
100+
101+
foreach (IHttpClientBuilder instance in builders)
102+
{
103+
OnAddApiHttpClientBuilder(instance);
104+
builder?.Invoke(instance);
105+
}
103106

104107
HttpClientsAdded = true;
105108

106109
return this;
107110
}
108111

112+
/// <summary>
113+
/// Applies configuration to each HttpClient after registration.
114+
/// Implement this partial method in a separate file to provide custom defaults;
115+
/// the caller's <c>builder</c> action runs after.
116+
/// </summary>
117+
/// <param name="builder"></param>
118+
partial void OnAddApiHttpClientBuilder(IHttpClientBuilder builder);
119+
120+
/// <summary>
121+
/// Called at the end of the constructor after all JSON converters and services are registered.
122+
/// Implement this partial method to further configure <c>_jsonOptions</c> or register additional singletons via <c>_services</c>.
123+
/// </summary>
124+
partial void OnHostConfigurationCreated();
125+
126+
/// <summary>
127+
/// Called after all services have been registered.
128+
/// Implement this partial method to register additional services.
129+
/// </summary>
130+
/// <param name="services"></param>
131+
partial void OnServicesAdded(IServiceCollection services);
132+
133+
internal void NotifyServicesAdded(IServiceCollection services) => OnServicesAdded(services);
134+
109135
/// <summary>
110136
/// Configures the JsonSerializerSettings
111137
/// </summary>

samples/client/petstore/csharp/generichost/latest/ComposedEnum/src/Org.OpenAPITools/Extensions/IHostBuilderExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ public static IHostBuilder ConfigureApi(this IHostBuilder builder)
4242
/// </summary>
4343
/// <param name="builder"></param>
4444
/// <param name="options"></param>
45-
public static IHostBuilder ConfigureApi(this IHostBuilder builder, Action<HostBuilderContext, HostConfiguration> options)
45+
public static IHostBuilder ConfigureApi(this IHostBuilder builder, Action<HostBuilderContext, HostConfiguration>? options = null)
4646
{
4747
builder.ConfigureServices((context, services) =>
4848
{
4949
HostConfiguration config = new HostConfiguration(services);
5050

51-
options(context, config);
51+
options?.Invoke(context, config);
5252

5353
IServiceCollectionExtensions.AddApi(services, config);
5454
});

samples/client/petstore/csharp/generichost/latest/ComposedEnum/src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ internal static void AddApi(IServiceCollection services, HostConfiguration host)
6868
s => s.GetRequiredService(typeof(RateLimitProvider<>).MakeGenericType(tokenType)));
6969
}
7070
}
71+
72+
host.NotifyServicesAdded(services);
7173
}
7274
}
7375
}

samples/client/petstore/csharp/generichost/latest/HelloWorld/src/Org.OpenAPITools/Client/HostConfiguration.cs

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace Org.OpenAPITools.Client
2424
/// <summary>
2525
/// Provides hosting configuration for Org.OpenAPITools
2626
/// </summary>
27-
public class HostConfiguration
27+
public partial class HostConfiguration
2828
{
2929
private readonly IServiceCollection _services;
3030
private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions();
@@ -47,6 +47,7 @@ public HostConfiguration(IServiceCollection services)
4747
JsonSerializerOptionsProvider jsonSerializerOptionsProvider = new(_jsonOptions);
4848
_services.AddSingleton(jsonSerializerOptionsProvider);
4949
_services.AddSingleton<IApiFactory, ApiFactory>();
50+
OnHostConfigurationCreated();
5051
}
5152

5253
/// <summary>
@@ -91,16 +92,41 @@ public HostConfiguration AddApiHttpClients(
9192

9293
List<IHttpClientBuilder> builders = new List<IHttpClientBuilder>();
9394

94-
95-
if (builder != null)
96-
foreach (IHttpClientBuilder instance in builders)
97-
builder(instance);
95+
96+
foreach (IHttpClientBuilder instance in builders)
97+
{
98+
OnAddApiHttpClientBuilder(instance);
99+
builder?.Invoke(instance);
100+
}
98101

99102
HttpClientsAdded = true;
100103

101104
return this;
102105
}
103106

107+
/// <summary>
108+
/// Applies configuration to each HttpClient after registration.
109+
/// Implement this partial method in a separate file to provide custom defaults;
110+
/// the caller's <c>builder</c> action runs after.
111+
/// </summary>
112+
/// <param name="builder"></param>
113+
partial void OnAddApiHttpClientBuilder(IHttpClientBuilder builder);
114+
115+
/// <summary>
116+
/// Called at the end of the constructor after all JSON converters and services are registered.
117+
/// Implement this partial method to further configure <c>_jsonOptions</c> or register additional singletons via <c>_services</c>.
118+
/// </summary>
119+
partial void OnHostConfigurationCreated();
120+
121+
/// <summary>
122+
/// Called after all services have been registered.
123+
/// Implement this partial method to register additional services.
124+
/// </summary>
125+
/// <param name="services"></param>
126+
partial void OnServicesAdded(IServiceCollection services);
127+
128+
internal void NotifyServicesAdded(IServiceCollection services) => OnServicesAdded(services);
129+
104130
/// <summary>
105131
/// Configures the JsonSerializerSettings
106132
/// </summary>

samples/client/petstore/csharp/generichost/latest/HelloWorld/src/Org.OpenAPITools/Extensions/IHostBuilderExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ public static IHostBuilder ConfigureApi(this IHostBuilder builder)
4242
/// </summary>
4343
/// <param name="builder"></param>
4444
/// <param name="options"></param>
45-
public static IHostBuilder ConfigureApi(this IHostBuilder builder, Action<HostBuilderContext, HostConfiguration> options)
45+
public static IHostBuilder ConfigureApi(this IHostBuilder builder, Action<HostBuilderContext, HostConfiguration>? options = null)
4646
{
4747
builder.ConfigureServices((context, services) =>
4848
{
4949
HostConfiguration config = new HostConfiguration(services);
5050

51-
options(context, config);
51+
options?.Invoke(context, config);
5252

5353
IServiceCollectionExtensions.AddApi(services, config);
5454
});

samples/client/petstore/csharp/generichost/latest/HelloWorld/src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ internal static void AddApi(IServiceCollection services, HostConfiguration host)
6868
s => s.GetRequiredService(typeof(RateLimitProvider<>).MakeGenericType(tokenType)));
6969
}
7070
}
71+
72+
host.NotifyServicesAdded(services);
7173
}
7274
}
7375
}

samples/client/petstore/csharp/generichost/latest/InlineEnumAnyOf/src/Org.OpenAPITools/Client/HostConfiguration.cs

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace Org.OpenAPITools.Client
2424
/// <summary>
2525
/// Provides hosting configuration for Org.OpenAPITools
2626
/// </summary>
27-
public class HostConfiguration
27+
public partial class HostConfiguration
2828
{
2929
private readonly IServiceCollection _services;
3030
private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions();
@@ -52,6 +52,7 @@ public HostConfiguration(IServiceCollection services)
5252
_services.AddSingleton(jsonSerializerOptionsProvider);
5353
_services.AddSingleton<IApiFactory, ApiFactory>();
5454
_services.AddSingleton<DefaultApiEvents>();
55+
OnHostConfigurationCreated();
5556
}
5657

5758
/// <summary>
@@ -97,16 +98,41 @@ public HostConfiguration AddApiHttpClients(
9798
List<IHttpClientBuilder> builders = new List<IHttpClientBuilder>();
9899

99100
builders.Add(_services.AddHttpClient<IDefaultApi, DefaultApi>("Org.OpenAPITools.Api.IDefaultApi", client));
100-
101-
if (builder != null)
102-
foreach (IHttpClientBuilder instance in builders)
103-
builder(instance);
101+
102+
foreach (IHttpClientBuilder instance in builders)
103+
{
104+
OnAddApiHttpClientBuilder(instance);
105+
builder?.Invoke(instance);
106+
}
104107

105108
HttpClientsAdded = true;
106109

107110
return this;
108111
}
109112

113+
/// <summary>
114+
/// Applies configuration to each HttpClient after registration.
115+
/// Implement this partial method in a separate file to provide custom defaults;
116+
/// the caller's <c>builder</c> action runs after.
117+
/// </summary>
118+
/// <param name="builder"></param>
119+
partial void OnAddApiHttpClientBuilder(IHttpClientBuilder builder);
120+
121+
/// <summary>
122+
/// Called at the end of the constructor after all JSON converters and services are registered.
123+
/// Implement this partial method to further configure <c>_jsonOptions</c> or register additional singletons via <c>_services</c>.
124+
/// </summary>
125+
partial void OnHostConfigurationCreated();
126+
127+
/// <summary>
128+
/// Called after all services have been registered.
129+
/// Implement this partial method to register additional services.
130+
/// </summary>
131+
/// <param name="services"></param>
132+
partial void OnServicesAdded(IServiceCollection services);
133+
134+
internal void NotifyServicesAdded(IServiceCollection services) => OnServicesAdded(services);
135+
110136
/// <summary>
111137
/// Configures the JsonSerializerSettings
112138
/// </summary>

0 commit comments

Comments
 (0)