代码之家  ›  专栏  ›  技术社区  ›  Bogey

Code gen-生成类,其接口引用生成类的嵌套类型

  •  0
  • Bogey  · 技术社区  · 4 年前

    假设我的目标库(将注入代码的库)定义了一个接口:

    interface ISomething<T> { }
    

    我正在尝试按如下方式生成一个类声明:

    class Test : ISomething<Test.Nested>
    {
      class Nested { }
    }
    

    我希望使用SyntaxFactorys来实现这一点,即尽可能避免自己创建(字符串)源代码。我该怎么做?

    INamedTypeSymbol iSomethingType = FindInterface(); // assume this works
    
    var nestedClass = SyntaxFactory.ClassDeclaration("Nested");
    
    var outerClass = SyntaxFactory.ClassDeclaration("Test")
     .AddMembers(nestedClass)
     .AddBaseListTypes( /* whoops.. what now? */ );
    

    但是,我不确定如何最好地掌握嵌套类的BaseTypeSyntax。

    .AddBaseListTypes(SyntaxFactory.SimpleBaseType(SyntaxFactory.ParseTypeName($"iSomethingType.ToFullyQualifiedDisplayStringWithoutGenerics()<{FullyQualifiedNameOfNestedClass}>")))
    

    但我不喜欢在这里自己生成类型字符串,这正是我试图避免的。

    0 回复  |  直到 4 年前