提问人:Taylor C. White 提问时间:4/13/2023 更新时间:5/18/2023 访问量:62
Roslyn:从控制器路由自动生成方法
Roslyn: Auto generating methods from controller routes
问:
我编写了一个 Roslyn 源代码生成器,该生成器访问所有控制器的方法,这些方法上具有 HttpGet、HttpPut、HttpDelete 或 HttpPost 属性,然后创建如下类,我希望这些类可用于我的 Blazor 客户端类:
// <auto-generated>
// This code was generated by OurGov.Data.Shared.Generators.ApiRoutesGenerator version 1.0.4.1
// </auto-generated>
#nullable enable
namespace OurGov.Data.Shared.Models.Routes;
/// <summary>Defines routes.</summary>
public static partial class ApiRoutes
{
/// <summary>Endpoints for EventsController</summary>
public static class EventsRoutes
{
/// <summary>HttpGet: See EventsController.GetEventsForFeed</summary>
public static string GetEventsForFeed(string filterValue) => $"api/events/feed/{filterValue}";
...more endpoints...
/// <summary>HttpPost: See EventsController.GetHearingsForCommittee</summary>
public static string GetHearingsForCommittee() => $"api/events/hearings/search";
}
}
我将命名空间设置为与 OurGov.Data.Shared .DLL的一部分相同的命名空间,但是,唉,(回想起来,显然)这并不能使它如此。
我将如何从我的启动项目(即我的控制器所在的位置)生成代码,然后让这些新生成的类自动(理想情况下)可供下游项目(服务器所依赖的项目)使用?
答:
1赞
Kevin Krumwiede
5/18/2023
#1
禁止增量源生成器访问其目标项目之外的文件。他们也无法进行网络调用,也无法轻松使用 NuGet 包。所有这些事情都可以用老式的控制台应用源生成器来完成。我已经有一段时间没有使用过其中之一了,也不知道它们在最新版本的 .NET 和 Visual Studio 中的工作情况如何。
我无法向你指出有关如何编写控制台应用源代码生成器的明确来源。如果你走这条路,你将不得不从旧的博客文章中拼凑出来。这是我几年前写的一个示例:NSwagClientGenerator。
评论