gpt4 book ai didi

c# - DI NSwag 自动生成客户端的正确方法

转载 作者:行者123 更新时间:2023-12-04 14:49:16 28 4
gpt4 key购买 nike

将 VS 连接服务 (NSwag) 注入(inject)到类/ Controller 中的首选方法是什么。我在网上找到了很多使用这种表格的建议:

services.AddHttpClient<IClient, Client>((provider, client) =>
{
client.BaseAddress = new System.Uri("https://some.baseurl/");
});
但是这会导致错误
{"errorMessage":"Unable to resolve service for type 'System.String' while attempting to activate 'xxx.Client'."}
这来自 obj 中自动生成的客户端类,这似乎在构造函数中强制使用字符串 BaseUrl ,当然 DI 无法解析:
public Client(string baseUrl, System.Net.Http.HttpClient httpClient)
{
BaseUrl = baseUrl;
_httpClient = httpClient;
_settings = new System.Lazy<Newtonsoft.Json.JsonSerializerSettings>(CreateSerializerSettings);
}
这个基本 URL 稍后会被强制添加到 url 构建器代码中,因此它不能真正被绕过。然而,即使是网络上对客户端类使用部分扩展的解决方案似乎也完全忽略了自动生成类中的 baseUrl(如 here )。好像它不存在一样(这很奇怪,NSwag 在生成不同的构造函数之前有没有?)。该类是通过 csproj 生成的:
  <ItemGroup>
<OpenApiReference Include="OpenAPIs\swagger.json" CodeGenerator="NSwagCSharp" Namespace="xxx" ClassName="Client">
<SourceUri>https://localhost:44353/swagger/v1/swagger.json</SourceUri>
</OpenApiReference>
</ItemGroup>
这导致目标构建调用:
2>GenerateNSwagCSharp:
2> "C:\.<path>./tools/Win/NSwag.exe" openapi2csclient /className:Client /namespace:xxx /input:"C:\<projpath>\OpenAPIs\swagger.json" /output:"obj\swaggerClient.cs"
2>NSwag command line tool for .NET 4.6.1+ WinX64, toolchain v13.13.2.0 (NJsonSchema v10.5.2.0 (Newtonsoft.Json v11.0.0.0))
那么,这是如何做到的呢?可能,如果不为代理类创建另一个代理类,我宁愿 DI 处理我的对象生命周期。如果可能,我还想避免使用 NSwagStudio,并希望保留 VS 提供的工具。

最佳答案

好的,我实际上通过浏览 OpenApiReference 解决了这个问题,但需要手动修改csproj文件。附加 Options节点必须添加到 OpenApiReference项组,指示 NSwag 不公开 BaseUrl 并生成一个接口(interface),从而简化设置 DI 的工作,无需额外代码。
Visual Studio 团队真的应该将这两个复选框添加到 OpenAPI 的连接服务屏幕/配置中。

<ItemGroup>
<OpenApiReference Include="OpenAPIs\swagger.json" CodeGenerator="NSwagCSharp" Namespace="xxx" ClassName="Client">
<SourceUri>https://localhost:44353/swagger/v1/swagger.json</SourceUri>
<Options>/UseBaseUrl:false /GenerateClientInterfaces:true</Options>
</OpenApiReference>
</ItemGroup>
现在只有一个 HttpClient构造函数,和NSwag 客户端代理使用它的基地址,所以 AddHttpClient通过 DI 正常工作。

关于c# - DI NSwag 自动生成客户端的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69333244/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com