Program.cs(其实里面服务注入和中间件的配置可以单独拿到Startup.cs中)
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace Test.Core
{
class Program
{
static Dictionary<string, string> memorySource = new Dictionary<string, string>
{
["Format:DateTime:LongDatePattern"] = "dddd, MMMM d, yyyy",
["Format:DateTime:LongTimePattern"] = "h:mm:ss tt",
["Format:DateTime:ShortDatePattern"] = "M/d/yyyy",
["Format:DateTime:ShortTimePattern"] = "h:mm tt",
["Format:CurrencyDecimal:Digits"] = "2",
["Format:CurrencyDecimal:Symbol"] = "$",
};
static IConfigurationRoot configuration = new ConfigurationBuilder().AddInMemoryCollection(memorySource).Build();
public static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseConfiguration(configuration)
.ConfigureAppConfiguration(builder => builder
.AddEnvironmentVariables()
.AddJsonFile("haha.json", true, true))
.ConfigureAppConfiguration((context, builder) => builder
.AddEnvironmentVariables()
.AddJsonFile("haha.json", false, true))
.ConfigureLogging(builder => builder
.AddConfiguration(configuration))
.ConfigureLogging((context, builder) => builder
.AddConfiguration(configuration)
.AddConfiguration(context.Configuration))
.ConfigureServices(ConfigureServiceWithConfig)
.Configure(Configure)
.Build()
.Run();
}
#region 应用配置信息项设定
private static void ConfigureApp(IConfigurationBuilder builder)
{
builder
.AddEnvironmentVariables()
.AddJsonFile("haha.json", true, true);
}
private static void ConfigureAppConfiguration(WebHostBuilderContext context, IConfigurationBuilder builder)
{
builder
.AddEnvironmentVariables()
.AddJsonFile("haha.json", true, true);
}
#endregion
#region 应用日志配置项设定
private static void ConfigureLog(ILoggingBuilder builder)
{
builder.AddConfiguration(configuration);
}
private static void ConfigureLogging(WebHostBuilderContext context, ILoggingBuilder builder)
{
builder.AddConfiguration(configuration)
.AddConfiguration(context.Configuration);
}
#endregion
#region 应用服务注入配置 -> 当需要注册的服务很多的时候,框架便设计成可以单独开辟一个Startup.cs文件,将此部分代码放进去
private static void ConfigureService(IServiceCollection services)
{
services.AddOptions();
}
private static void ConfigureServiceWithConfig(WebHostBuilderContext context, IServiceCollection services)
{
services.AddOptions()
.Configure<JsonConfig>(context.Configuration.GetSection("Logging"));
}
#endregion
#region 应用中间件配置-> 当需要注册的中间件很多的时候,框架便设计成可以单独开辟一个Startup.cs文件,将此部分代码放进去
private static void Configure(IApplicationBuilder builder)
{
builder.Run(async context =>
{
context.Response.Headers["Content-Type"] = "text/html; charset=utf-8";
await context.Response.WriteAsync($"测试专用{ (context.RequestServices.GetRequiredService<IOptions<JsonConfig>>().Value.IncludeScopes == true ? "kong" : "true") }");
});
}
#endregion
}
}
其他文件
Json文件
{
"Logging": {
"IncludeScopes": true,
"LogLevel": {
"Default": "Information"
}
}
}
Json对应类
{
"Logging": {
"IncludeScopes": true,
"LogLevel": {
"Default": "Information"
}
}
}