如何使用 CodeGenerator 实现接口的所有成员
Posted
技术标签:
【中文标题】如何使用 CodeGenerator 实现接口的所有成员【英文标题】:How to implement all members of an interface using CodeGenerator 【发布时间】:2021-09-03 03:58:15 【问题描述】:我正在创建一个 Visual Studio 扩展,在其中执行某些命令时,应该生成一个 .cs 文件,其中包含一个实现接口的类,并且所有成员也应该自动实现。
例子:
假设我有以下界面,
interface IFile
void ReadFile();
void WriteFile(string text);
我想生成以下代码:
using System;
namespace TestProject
public class FileInfo : IFile
public void ReadFile()
public void WriteFile(string text)
但我只能生成以下内容:
using System;
namespace TestProject
public class FileInfo : IFile
生成上述代码的代码如下:
AdhocWorkspace adhocWorkspace = new AdhocWorkspace();
var syntaxGenerator = SyntaxGenerator.GetGenerator(adhocWorkspace, LanguageNames.CSharp);
var usingSystem = syntaxGenerator.NamespaceImportDeclaration("System");
var interfaceNode = new List<SyntaxNode>() SyntaxFactory.ParseTypeName("IFile") ;
var classDeclaration = syntaxGenerator.ClassDeclaration("FileInfo",
null,
Accessibility.Public,
DeclarationModifiers.None,
null,
interfaceNode,
null
);
var namespaceDeclaration = syntaxGenerator.NamespaceDeclaration("TestProject", classDeclaration);
var generatedCode = syntaxGenerator.CompilationUnit(usingSystem, namespaceDeclaration)
.NormalizeWhitespace().ToFullString();
如何使用 CodeGenerator 实现所有成员? 或者是否有我可以使用的命令,例如格式化文档的命令,如下所示
dte.ExecuteCommand("Edit.FormatDocument", string.Empty);
【问题讨论】:
【参考方案1】:你可以使用SyntaxGenerator.MethodDeclaration Method,就像:
var cloneMethoDeclaration = generator.MethodDeclaration("ReadFile",
null,
null,
null,
Accessibility.Public,
DeclarationModifiers.None,
null);
我也找到了a sample from github,希望对你有帮助。
【讨论】:
这是手动方法。手动生成接口的所有成员。 如果你想自动实现一个接口,也许你可以创建一个sn-p或者通过vs扩展修改现有的sn-p文件。以上是关于如何使用 CodeGenerator 实现接口的所有成员的主要内容,如果未能解决你的问题,请参考以下文章
Intellij-安装CodeGenerator插件并且添加Builder模板
找不到与命令“dotnet-aspnet-codegenerator”匹配的可执行文件”
aspnet-codegenerator:没有可用的代码生成器,即使添加了 Microsoft.VisualStudio.Web.CodeGeneration.Design
Android Studio插件之快速findViewById(butterknife和Android CodeGenerator的使用)