【发布时间】:2019-02-02 21:00:46
【问题描述】:
我编写了一个 C# 解决方案,其中包含许多不同的项目。由于此解决方案充当后端,因此我想为它编写一个 API。问题是客户端必须添加相对大量的命名空间才能访问必要的接口和类。 有没有办法将命名空间“捆绑”到一个命名空间(或至少更少的命名空间)中,这样客户端就不必添加那么多使用指令,或者我必须完全重组我的后端?
非常感谢。
【问题讨论】:
标签: c# api namespaces using
我编写了一个 C# 解决方案,其中包含许多不同的项目。由于此解决方案充当后端,因此我想为它编写一个 API。问题是客户端必须添加相对大量的命名空间才能访问必要的接口和类。 有没有办法将命名空间“捆绑”到一个命名空间(或至少更少的命名空间)中,这样客户端就不必添加那么多使用指令,或者我必须完全重组我的后端?
非常感谢。
【问题讨论】:
标签: c# api namespaces using
假设您的意思是创建一个 ASP.NET WebApi 应用程序,那么命名空间应该无关紧要。任何消费应用程序都会以没有命名空间的 JSON 格式接收数据。
您可以考虑使用像 Swagger 这样的工具,它充当跨平台自动文档化 api 工具。从 .net 的角度来看,有两个流行的库 NSwag 和 Swashbuckle 可以帮助您入门。 NSwag 还包括通过检查 swagger.json 文件来创建客户端类的工具,就像旧的 WSDL 定义一样。
只要您的 JSON 对象具有相同的属性名称,任何客户端都会很乐意将它们反序列化为自己的命名空间类。
如果您仅在内部使用此 api,则可能更简洁的另一个选项是在单独的类库中重现您希望通过 api 输出的所有类。然后,api 负责现有命名空间/类和新命名空间/类之间的映射。像Automapper 这样的工具可以在这方面提供很大帮助。它还有一个额外的优势,您可以自定义映射,以便 准确 api 发出所需的数据,而所有无关的数据都不会发出。
这个类库可以作为项目引用、dll 或(如果您有正确的设置)NuGet 包在应用程序之间共享。
【讨论】: