摘要和问题
我希望在C#中生成代码,以防止重复出现,并像他们自己一样包装Google API,如.Net Client library page所述。 编辑:Their generator显然是用Python编写的。我将继续调查其他.Net选项。
我应该把注意力集中在哪里,CodeDOM,Roslyn还是其他什么?我根本不应该考虑代码生成 - 如果是的话,我应该采取什么替代方法来正确处理这种情况?
详情
我正在为Google .Net API编写一个包装器,为PowerShell创建一个Google API库(适用于任何和所有Google API)。我已经有三个API工作,但由于我的项目处理所有的身份验证(及其存储)和其他事情,如分页,我必须基本上包装每个API方法调用以使用我自己的身份验证,以便用户不必担心。这导致了很多重复的编码封装方法,这些方法已经存在于.Net库中:
public Data.Asp Get(string userKey, int codeId)
{
//I have to wrap their get method with my own using GetService(), for example
return GetService().Asps.Get(userKey, codeId).Execute();
}
由于这些都是通过Google Discovery API或通过底层客户端库存在的信息的模式,我觉得应该有一些方法来生成代码并省去一些麻烦。
一些背景和相关信息
在Google API .Net Client库的主页上声明:
使用Discovery API以编程方式生成各个Google API的源代码。
我想做类似的事情,虽然我不知道在哪里集中时间和研究。我在CodeDOM之间查找了Roslyn(以及固有限制),some differences以及the two。我还检查了T4 Text Templates for Visual Studio。
要清楚,我不希望在运行时生成代码,就像我想要反射一样,我希望生成一些库 - 虽然我不确定我是不是正在寻找active or passive代。
答案 0 :(得分:1)
我在Google上使用.NET客户端库(除其他外)。你的问题相当广泛,但这是一般性的想法:
用于描述“大多数”Google API的元数据是通过发现文档。这描述了API的方法和类型。
然后,您可以从Python库中生成用于访问Google API的客户端库。 (特别是使用Django作为模板语言。)
为每个Google API生成代码后,我们会调用MSBuild,打包二进制文件,然后将它们部署到NuGet。
至于您关于如何生成代码的具体问题,我建议您构建两个单独的组件。第一个是读取和解析发现文档的东西,第二个是将发出代码的组件。
对于实际的代码,这里有一些个人观点:
所以我现在建议一个基于文本的基本解决方案,看看能走多远。如果您有任何其他问题,请随时给我发消息或在GitHub issue tracker上记录问题。