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.
iot/projects/Infrastructure/Web/Hosting/IWebHostBuilderExtensions.cs

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;
}
}
}