我正在玩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