You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.7 KiB
73 lines
2.7 KiB
using System;
|
|
using System.Globalization;
|
|
using System.Net.Http;
|
|
using System.Reflection;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Serilog;
|
|
using Volo.Abp.Modularity;
|
|
|
|
namespace Win_in.Sfs.Shared.Host;
|
|
|
|
public static class HostBuilderExtensions
|
|
{
|
|
public static int BuildAndRun<TModule>(this WebApplicationBuilder builder,
|
|
Action<WebApplicationBuilder> builderAction = null,
|
|
Action<WebApplication> appAction = null) where TModule : IAbpModule
|
|
{
|
|
Serilog.Debugging.SelfLog.Enable(Console.WriteLine);
|
|
Log.Logger = new LoggerConfiguration()
|
|
.Enrich.FromLogContext()
|
|
.WriteTo.Console(formatProvider: CultureInfo.InvariantCulture)
|
|
.CreateBootstrapLogger();
|
|
|
|
try
|
|
{
|
|
Log.Information($"Starting web host ${Assembly.GetEntryAssembly().GetName().Name}");
|
|
builder.Host.ConfigureAppConfiguration((hc, cb) =>
|
|
{
|
|
var defaultUrl = builder.Environment.IsDevelopment() ? "http://localhost:21093/" : "http://gateway/";
|
|
var configUrl = cb.Build().GetValue("", defaultUrl.TrimEnd('/'));
|
|
AddJsonByUrl(cb, $"{configUrl}/appsettings.json");
|
|
if (builder.Environment.IsDevelopment())
|
|
{
|
|
AddJsonByUrl(cb, $"{configUrl}/appsettings.{builder.Environment.EnvironmentName}.json");
|
|
}
|
|
});
|
|
builder.Host.UseAutofac();
|
|
builder.AddApplicationAsync<TModule>().Wait();
|
|
builder.Host.UseSerilog((hostingContext, services, configBuilder) =>
|
|
{
|
|
configBuilder
|
|
.ReadFrom.Configuration(hostingContext.Configuration)
|
|
.ReadFrom.Services(services)
|
|
.Enrich.FromLogContext()
|
|
.WriteTo.Console(formatProvider: CultureInfo.InvariantCulture);
|
|
}, writeToProviders: false);
|
|
builderAction?.Invoke(builder);
|
|
var app = builder.Build();
|
|
app.UseSerilogRequestLogging();
|
|
app.InitializeApplicationAsync().Wait();
|
|
appAction?.Invoke(app);
|
|
app.RunAsync().Wait();
|
|
return 0;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.Fatal(ex, "Host terminated unexpectedly!");
|
|
return 1;
|
|
}
|
|
finally
|
|
{
|
|
Log.CloseAndFlush();
|
|
}
|
|
}
|
|
|
|
private static void AddJsonByUrl(IConfigurationBuilder configurationBuilder, string url)
|
|
{
|
|
var stream = new HttpClient().GetStreamAsync(url).Result;
|
|
configurationBuilder.AddJsonStream(stream);
|
|
}
|
|
}
|
|
|