Expose UseRoutes() for WebApp

This commit is contained in:
2024-09-23 18:25:21 +02:00
parent 92752ff2c3
commit 222c26e3d8
3 changed files with 19 additions and 1 deletions
@@ -67,14 +67,23 @@ public class MapEndpointGenerator : IIncrementalGenerator
var namespaceBuilder = languageVersion >= LanguageVersion.CSharp10 ? SyntaxBuilder.CreateFileScopedNamespace(Constants.Namespace) : SyntaxBuilder.CreateNamespace(Constants.Namespace);
builder.WithNamespace(namespaceBuilder);
var webAppBuilder = SyntaxBuilder.CreateClass(Constants.WebApplicationExtensionsName)
.WithModifiers($"{Constants.Public} {Constants.Static}");
var extensionClassBuilder = SyntaxBuilder.CreateClass(Constants.EndpointRouteBuilderExtensionsName)
.WithModifiers($"{Constants.Public} {Constants.Static}");
namespaceBuilder.WithClass(webAppBuilder);
namespaceBuilder.WithClass(extensionClassBuilder);
var useRoutesWebAppMethodBuilder = SyntaxBuilder.CreateMethod(Constants.WebApplicationTypeName, Constants.UseRoutesMethodName)
.WithThisParameter(Constants.WebApplicationTypeName, Constants.BuilderParameterName)
.WithModifiers($"{Constants.Public} {Constants.Static}");
var useRoutesMethodBuilder = SyntaxBuilder.CreateMethod(Constants.IEndpointRouteBuilderTypeName, Constants.UseRoutesMethodName)
.WithThisParameter(Constants.IEndpointRouteBuilderTypeName, Constants.BuilderParameterName)
.WithModifiers($"{Constants.Public} {Constants.Static}");
var useRoutesBody = new StringBuilder();
var useRoutesWebAppBody = new StringBuilder();
foreach (var classDeclarationSyntax in classes)
{
if (classDeclarationSyntax is null)
@@ -98,6 +107,7 @@ public class MapEndpointGenerator : IIncrementalGenerator
if (methodBuilder is not null)
{
useRoutesBody.AppendLine($"{methodName}(builder);");
useRoutesWebAppBody.AppendLine($"{Constants.EndpointRouteBuilderExtensionsName}.{methodName}(builder);");
extensionClassBuilder.WithMethod(methodBuilder);
}
}
@@ -108,6 +118,7 @@ public class MapEndpointGenerator : IIncrementalGenerator
if (methodBuilder is not null)
{
useRoutesBody.AppendLine($"{methodName}(builder);");
useRoutesWebAppBody.AppendLine($"{Constants.EndpointRouteBuilderExtensionsName}.{methodName}(builder);");
extensionClassBuilder.WithMethod(methodBuilder);
}
}
@@ -118,6 +129,7 @@ public class MapEndpointGenerator : IIncrementalGenerator
if (methodBuilder is not null)
{
useRoutesBody.AppendLine($"{methodName}(builder);");
useRoutesWebAppBody.AppendLine($"{Constants.EndpointRouteBuilderExtensionsName}.{methodName}(builder);");
extensionClassBuilder.WithMethod(methodBuilder);
}
}
@@ -128,14 +140,18 @@ public class MapEndpointGenerator : IIncrementalGenerator
if (methodBuilder is not null)
{
useRoutesBody.AppendLine($"{methodName}(builder);");
useRoutesWebAppBody.AppendLine($"{Constants.EndpointRouteBuilderExtensionsName}.{methodName}(builder);");
extensionClassBuilder.WithMethod(methodBuilder);
}
}
}
useRoutesBody.AppendLine("return builder;");
useRoutesWebAppBody.AppendLine($"return builder;");
useRoutesMethodBuilder.WithBody(useRoutesBody.ToString());
useRoutesWebAppMethodBuilder.WithBody(useRoutesWebAppBody.ToString());
extensionClassBuilder.WithMethod(useRoutesMethodBuilder);
webAppBuilder.WithMethod(useRoutesWebAppMethodBuilder);
foreach (var classUsing in routeUsings)
{
builder.WithUsing(classUsing);