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.
68 lines
2.6 KiB
68 lines
2.6 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using Infrastructure.Configuration;
|
|
using Infrastructure.Extensions;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.Configuration;
|
|
using Microsoft.Extensions.Logging;
|
|
using Serilog;
|
|
|
|
namespace Infrastructure.Web.Hosting
|
|
{
|
|
public static class IWebHostBuilderExtensions
|
|
{
|
|
public static void Run<TStartup>(this IWebHostBuilder hostBuilder, List<EFConfigurationValue> configValues = null, int? fileSize = null) where TStartup : class
|
|
{
|
|
try
|
|
{
|
|
hostBuilder
|
|
.Configuration<TStartup>(configValues, fileSize)
|
|
.Build()
|
|
.Run();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ex.PrintStack();
|
|
Log.Fatal(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
Log.CloseAndFlush();
|
|
}
|
|
}
|
|
|
|
public static IConfigurationBuilder Build(this IConfigurationBuilder builder, List<EFConfigurationValue> configValues)
|
|
{
|
|
return builder.SetBasePath(Directory.GetCurrentDirectory())
|
|
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
|
|
.AddEFConfiguration(options => options.UseSqlite("Data Source=configuration.db"), configValues ?? new List<EFConfigurationValue>())
|
|
.AddEnvironmentVariables();
|
|
}
|
|
|
|
public static IWebHostBuilder Configuration<TStartup>(this IWebHostBuilder hostBuilder, List<EFConfigurationValue> configValues = null, int? fileSize = null) where TStartup : class
|
|
{
|
|
var configuration = new ConfigurationBuilder().Build(configValues).Build();
|
|
Log.Logger = new LoggerConfiguration()
|
|
.ReadFrom.Configuration(configuration)
|
|
.WriteTo.Console()
|
|
#if DEBUG
|
|
.WriteTo.File("logs/log.txt", rollOnFileSizeLimit: true, fileSizeLimitBytes: fileSize ?? 100 * 1024 * 1024, rollingInterval: RollingInterval.Infinite)
|
|
#else
|
|
.WriteTo.File("logs/log.txt", fileSizeLimitBytes: fileSize ?? 100 * 1024 * 1024)
|
|
#endif
|
|
.CreateLogger();
|
|
hostBuilder
|
|
.UseConfiguration(configuration)
|
|
.UseKestrel()
|
|
.UseSerilog()
|
|
.ConfigureAppConfiguration((hostingContext, config) =>
|
|
{
|
|
config.Build(configValues);
|
|
})
|
|
.UseStartup<TStartup>();
|
|
return hostBuilder;
|
|
}
|
|
}
|
|
} |