private static string MakeFileName(FileType type, Kind kind) { switch (type) { case FileType.ModelClass: return(NameHelper.MakeModelClassName(kind) + ".cs"); case FileType.GeneratorClass: return(NameHelper.MakeGeneratorClassName(kind) + ".cs"); case FileType.ScaffolderClass: return(NameHelper.MakeScaffolderClassName(kind) + ".cs"); case FileType.GeneratorInterface: return(NameHelper.MakeGeneratorInterfaceName(kind) + ".cs"); case FileType.ScaffolderInterface: return(NameHelper.MakeScaffolderInterfaceName(kind) + ".cs"); default: return(string.Empty + ".cs"); } }
private static string GenerateServicesClass(CodeGenerationOptions options) { Clear(); string ns = options.RootNamespace; WriteUsings(options, Kind.None); WriteLine($"namespace {ns}"); using (OpenBlock()) { WriteLine("public static class OpenApiServices"); using (OpenBlock()) { WriteLine("private static IServiceProvider _serviceProvider;"); WriteLine(); WriteLine("public static TService GetService<TService>()"); using (OpenBlock()) { WriteLine("return ServiceProvider.GetService<TService>();"); } WriteLine(); WriteLine("private static IServiceProvider ServiceProvider"); using (OpenBlock()) { WriteLine("get"); using (OpenBlock()) { WriteLine("if (_serviceProvider == null)"); using (OpenBlock()) { WriteLine("_serviceProvider = new ServiceCollection()"); PushIndent(); WriteLine($".AddSingleton<GeneratorDependencies>()"); WriteLine($".AddSingleton<ScaffolderDependencies>()"); WriteLine($".AddSingleton<IFileWriter, FileWriter>()"); WriteLine($".AddSingleton<IPathHelper, PathHelper>()"); WriteLine($".AddSingleton<ITextProvider, TextProvider>()"); WriteLine($".AddSingleton<INamespaceHelper, NamespaceHelper>()"); WriteLine($".AddSingleton<IScaffoldingManager, ScaffoldingManager>()"); foreach (var kind in options.Kinds) { string generatorInterface = NameHelper.MakeGeneratorInterfaceName(kind); string generatorClass = NameHelper.MakeGeneratorClassName(kind); WriteLine($".AddSingleton<{generatorInterface}, {generatorClass}>()"); } foreach (var kind in options.Kinds) { string scaffolderInterface = NameHelper.MakeScaffolderInterfaceName(kind); string scaffolderClass = NameHelper.MakeScaffolderClassName(kind); WriteLine($".AddSingleton<{scaffolderInterface}, {scaffolderClass}>()"); } WriteLine(".BuildServiceProvider();"); PopIndent(); } WriteLine("return _serviceProvider;"); } } } } return(GetText()); }
private static string GenerateGeneratorClass(CodeGenerationOptions options, Kind kind) { Clear(); string ns = NamespaceHelper.MakeNamespace(options.RootNamespace, kind); WriteUsings(options, kind); WriteLine($"namespace {ns}"); using (OpenBlock()) { string typeName = NameHelper.MakeGeneratorClassName(kind); string baseTypeName = NameHelper.MakeGeneratorInterfaceName(kind); WriteLine($"public class {typeName} : AbstractGenerator, {baseTypeName}"); using (OpenBlock()) { WriteLine($"public {typeName}(GeneratorDependencies dependencies) : base(dependencies)"); using (OpenBlock()) { } if (kind == Kind.Context || kind == Kind.Supervisor) { WriteLine($"public string WriteClassCode(OpenApiDocument document, string @namespace)"); using (OpenBlock()) { WriteLine("Clear();"); WriteLine("GenerateFileHeader();"); WriteLine("WriteLine($\"namespace {@namespace}\");"); WriteLine("using (OpenBlock())"); using (OpenBlock()) { } WriteLine("return GetText();"); } WriteLine(); WriteLine($"public string WriteInterfaceCode(OpenApiDocument document, string @namespace)"); using (OpenBlock()) { WriteLine("Clear();"); WriteLine("GenerateFileHeader();"); WriteLine("WriteLine($\"namespace {@namespace}\");"); WriteLine("using (OpenBlock())"); using (OpenBlock()) { } WriteLine("return GetText();"); } } else { WriteLine($"public string WriteCode(OpenApiSchema schema, string name, string @namespace)"); using (OpenBlock()) { WriteLine("Clear();"); WriteLine("GenerateFileHeader();"); WriteLine("WriteLine($\"namespace {@namespace}\");"); WriteLine("using (OpenBlock())"); using (OpenBlock()) { WriteLine(""); } WriteLine("return GetText();"); } } } } return(GetText()); }