diff --git a/Net.Sdk.Web.Extensions.SourceGenerators/Constants.cs b/Net.Sdk.Web.Extensions.SourceGenerators/Constants.cs index a5a3ff7..ade1448 100644 --- a/Net.Sdk.Web.Extensions.SourceGenerators/Constants.cs +++ b/Net.Sdk.Web.Extensions.SourceGenerators/Constants.cs @@ -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"; diff --git a/Net.Sdk.Web.Extensions.SourceGenerators/MapEndpointGenerator.cs b/Net.Sdk.Web.Extensions.SourceGenerators/MapEndpointGenerator.cs index 56f2521..14c4868 100644 --- a/Net.Sdk.Web.Extensions.SourceGenerators/MapEndpointGenerator.cs +++ b/Net.Sdk.Web.Extensions.SourceGenerators/MapEndpointGenerator.cs @@ -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); diff --git a/Net.Sdk.Web.Extensions.SourceGenerators/Net.Sdk.Web.Extensions.SourceGenerators.csproj b/Net.Sdk.Web.Extensions.SourceGenerators/Net.Sdk.Web.Extensions.SourceGenerators.csproj index 402f490..90995aa 100644 --- a/Net.Sdk.Web.Extensions.SourceGenerators/Net.Sdk.Web.Extensions.SourceGenerators.csproj +++ b/Net.Sdk.Web.Extensions.SourceGenerators/Net.Sdk.Web.Extensions.SourceGenerators.csproj @@ -2,7 +2,7 @@ netstandard2.0 - 0.8.4 + 0.8.5 latest true Alexandru Macocian