重写生成的代码中 BCL 类的构造函数



我有一些由NSwagStudio生成的代码。 这并不是说这真的很重要,因为这可能适用于任何生成的代码。 这实际上是一个不想操作生成的代码的问题,以防由于 API、模式更改等原因而必须重新生成它。 无论如何,我有一些看起来像这样的代码

var client_ = new System.Net.Http.HttpClient();

生成的类不共享此内容。 每种方法都是新的。 问题是我似乎找不到一种方法让它在不操作生成的代码并将上述行替换为

var x509Store = new X509Store(StoreLocation.LocalMachine);
x509Store.Open(OpenFlags.ReadOnly);
var x509Certificate = x509Store.Certificates.Find(
X509FindType.FindBySubjectName, "MyClientCertName", true
)[0];
var webRequestHandler = new WebRequestHandler();
webRequestHandler.ClientCertificates.Add(x509Certificate);
var client_ = new System.Net.Http.HttpClient(webRequestHandler);

这必须在调用 Web 服务的每个方法中完成。 不是很多,但足以令人讨厌。 更不用说我或其他开发人员必须记住在重新生成代码时对其进行修改。

我已经绞尽脑汁地研究可能的解决方案,例如System.Net.HttpClient的扩展构造函数;一些如何在分部类或包装类中做某事。 我并没有真正提出任何可能或有效的体面解决方案。

我在依赖注入方面没有太多经验,但也许这是它的候选者? 不知何故,如果我能告诉 .NET 嘿,我有这个客户端证书,并且每次您调用服务 X 时,我总是希望您传递它。 如果我存储我的处理程序并以某种方式告诉编译器在使用参数较少的构造函数时始终将其传递给构造函数,我可以这样做。

有什么想法或想法吗?

我对 Swagger 了解不多,但我可以告诉你,依赖注入不是魔法,更重要的是,它不适用于这样的运行时配置- 它意味着在启动时编写应用程序。

您应该在 Swagger 中寻找一种方法来生成您需要的确切代码(推荐)或在代码生成后立即挂接到某个事件,以便您可以自动更改生成的代码的过程。T4 模板选项看起来很有前途。

相关内容

  • 没有找到相关文章

最新更新