using Autofac; using Microsoft.CodeAnalysis; using NSwag; namespace LibKubernetesGenerator { [Generator] public class KubernetesClientSourceGenerator : IIncrementalGenerator { private static (OpenApiDocument, IContainer) BuildContainer() { var swagger = OpenApiDocument.FromJsonAsync(EmbedResource.GetResource("swagger.json")).GetAwaiter().GetResult(); var container = BuildContainer(swagger); return (swagger, container); } private static IContainer BuildContainer(OpenApiDocument swagger) { var builder = new ContainerBuilder(); builder.RegisterType() .WithParameter(new NamedParameter(nameof(swagger), swagger)) .AsSelf() .AsImplementedInterfaces() ; builder.RegisterType() .AsImplementedInterfaces() ; builder.RegisterType() .AsImplementedInterfaces() ; builder.RegisterType() .WithParameter(new TypedParameter(typeof(OpenApiDocument), swagger)) .AsImplementedInterfaces() ; builder.RegisterType() .AsSelf() .AsImplementedInterfaces() ; builder.RegisterType() .AsSelf() .AsImplementedInterfaces() ; builder.RegisterType() .AsImplementedInterfaces() ; builder.RegisterType() .AsImplementedInterfaces() ; builder.RegisterType() ; builder.RegisterType(); builder.RegisterType(); builder.RegisterType(); builder.RegisterType(); builder.RegisterType(); return builder.Build(); } public void Initialize(IncrementalGeneratorInitializationContext generatorContext) { #if GENERATE_BASIC generatorContext.RegisterPostInitializationOutput(ctx => { var (swagger, container) = BuildContainer(); container.Resolve().Generate(swagger, ctx); container.Resolve().Generate(swagger, ctx); container.Resolve().Generate(swagger, ctx); container.Resolve().Generate(swagger, ctx); container.Resolve().Generate(swagger, ctx); }); #endif } } }