@@ -27,15 +27,20 @@ public sealed class WebApplication : IHost, IApplicationBuilder, IEndpointRouteB
2727 internal const string GlobalEndpointRouteBuilderKey = "__GlobalEndpointRouteBuilder" ;
2828
2929 private readonly IHost _host ;
30- private readonly List < EndpointDataSource > _dataSources = new ( ) ;
30+ private readonly GlobalEndpointRouteBuilder _globalEndpointRouteBuilder ;
31+ private readonly RouteGroupBuilder _globalRouteGroupBuilder ;
3132
3233 internal WebApplication ( IHost host )
3334 {
3435 _host = host ;
36+
37+ _globalEndpointRouteBuilder = new ( this ) ;
38+ _globalRouteGroupBuilder = _globalEndpointRouteBuilder . MapGroup ( string . Empty ) ;
39+
3540 ApplicationBuilder = new ApplicationBuilder ( host . Services , ServerFeatures ) ;
3641 Logger = host . Services . GetRequiredService < ILoggerFactory > ( ) . CreateLogger ( Environment . ApplicationName ?? nameof ( WebApplication ) ) ;
3742
38- Properties [ GlobalEndpointRouteBuilderKey ] = this ;
43+ Properties [ GlobalEndpointRouteBuilderKey ] = _globalEndpointRouteBuilder ;
3944 }
4045
4146 /// <summary>
@@ -80,9 +85,14 @@ IServiceProvider IApplicationBuilder.ApplicationServices
8085 internal IDictionary < string , object ? > Properties => ApplicationBuilder . Properties ;
8186 IDictionary < string , object ? > IApplicationBuilder . Properties => Properties ;
8287
83- internal ICollection < EndpointDataSource > DataSources => _dataSources ;
88+ internal ICollection < EndpointDataSource > DataSources => ( ( IEndpointRouteBuilder ) _globalRouteGroupBuilder ) . DataSources ;
8489 ICollection < EndpointDataSource > IEndpointRouteBuilder . DataSources => DataSources ;
8590
91+ /// <summary>
92+ /// Gets the <see cref="IEndpointConventionBuilder"/> for the application.
93+ /// </summary>
94+ public IEndpointConventionBuilder Conventions => _globalRouteGroupBuilder ;
95+
8696 internal ApplicationBuilder ApplicationBuilder { get ; }
8797
8898 IServiceProvider IEndpointRouteBuilder . ServiceProvider => Services ;
@@ -307,4 +317,13 @@ public IList<string>? Middleware
307317 }
308318 }
309319 }
320+
321+ private sealed class GlobalEndpointRouteBuilder ( WebApplication application ) : IEndpointRouteBuilder
322+ {
323+ public IServiceProvider ServiceProvider => application . Services ;
324+
325+ public ICollection < EndpointDataSource > DataSources { get ; } = [ ] ;
326+
327+ public IApplicationBuilder CreateApplicationBuilder ( ) => ( ( IApplicationBuilder ) application ) . New ( ) ;
328+ }
310329}
0 commit comments