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
@@ -75,6 +75,8 @@ public static class Constants
public const string IEndpointRouteBuilderTypeName = "IEndpointRouteBuilder";
public const string WebApplicationBuilderExtensionsName = "WebApplicationBuilderExtension";
public const string WebApplicationBuilderTypeName = "WebApplicationBuilder";
public const string WebApplicationExtensionsName = "WebApplicationExtensions";
public const string WebApplicationTypeName = "WebApplication";
public const string WithRoutesName = "WithRoutes";
public const string BuilderParameterName = "builder";
@@ -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);
@@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>0.8.4</Version>
<Version>0.8.5</Version>
<LangVersion>latest</LangVersion>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>Alexandru Macocian</Authors>