Modelina Csharp生成器添加继承



我正在玩asyncapi/modelina CSharpGenerator。我想在生成的类中添加继承,就像这样

public class UserCreated: IEvent
{

}

这可能吗?除了生成的依赖项之外,我们还能添加其他依赖项吗?

不幸的是,继承是那些被放在次要位置的特性之一,而且仍然是。

幸运的是,这是可以实现的,但它确实需要您覆盖整个呈现行为,从长远来看,这可能是不可维护的。您可以在此PR中找到完整的示例:https://github.com/asyncapi/modelina/pull/772

const generator = new CSharpGenerator({
presets: [
{
class: {
// Self is used to overwrite the entire rendering behavior of the class
self: async ({renderer, options, model}) => {
//Render all the class content
const content = [
await renderer.renderProperties(),
await renderer.runCtorPreset(),
await renderer.renderAccessors(),
await renderer.runAdditionalContentPreset(),
];
if (options?.collectionType === 'List' ||
model.additionalProperties !== undefined ||
model.patternProperties !== undefined) {
renderer.addDependency('using System.Collections.Generic;');
}
const formattedName = renderer.nameType(model.$id);
return `public class ${formattedName} : IEvent
{
${renderer.indent(renderer.renderBlock(content, 2))}
}`;
}
}
}
]
});

这里发生的事情是,我们为类渲染器创建一个自定义预设,并覆盖它的整个渲染过程self

这将基于以下输入生成:

public class Root : IEvent
{
private string[] email;
public string[] Email 
{
get { return email; }
set { email = value; }
}
}

关于依赖关系,请参阅https://github.com/asyncapi/modelina/blob/master/docs/presets.md#adding-new-dependencies。您可以在self预设钩子中执行此操作。

您可以在这里阅读更多关于预设:https://github.com/asyncapi/modelina/blob/master/docs/presets.md

相关内容

  • 没有找到相关文章

最新更新