public static IHostBuilder CreateHostBuilder( string[] args, string fullProviderName, Action <IServiceCollection, IResourceRegistryContext> configure) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration(configuration => { configuration.AddJsonFile(Path.Combine(AppContext.BaseDirectory, "serilog.json"), optional: true); configuration.AddJsonFile("serilog.json", optional: true); }) .ConfigureServices((host, services) => { services.Configure <TerraformPluginHostOptions>(host.Configuration); services.Configure <TerraformPluginHostOptions>(x => x.FullProviderName = fullProviderName); services.AddSingleton(new PluginHostCertificate { Certificate = CertificateGenerator.GenerateSelfSignedCertificate("CN=127.0.0.1", "CN=root ca", CertificateGenerator.GeneratePrivateKey()), }); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.ConfigureTerraformPlugin(configure); }) .UseSerilog((context, services, configuration) => { configuration .ReadFrom.Configuration(context.Configuration) .ReadFrom.Services(services) .Enrich.FromLogContext(); // Only write to console in debug mode because Terraform reads connection details from stdout. if (services.GetRequiredService <IOptions <TerraformPluginHostOptions> >().Value.DebugMode) { configuration.WriteTo.Console(); } });