深刻贯彻落实Core项目入口的各种配置

xiaoxiao2021-02-28  24

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().AddJsonFile("haha.json", true, true).Build(); static IConfigurationRoot configuration = new ConfigurationBuilder().AddInMemoryCollection(memorySource).Build(); public static void Main() { Console.OutputEncoding = Encoding.UTF8; //解决控制台乱码问题 //相对于网站应用来说,控制台应用大可不必调用CreateDefaultBuilder方法来让框架给你做一些提前量的工作 //提前量的工作包括但不限于:实例化Kestrel服务作为网站的服务用于接收和响应请求,监控端口;设置网站的文件路径; //载入某些Configuration(从json,环境变量,内存等等) 等,详情见此方法的api说明 //对于控制台应用来说,可以很干净地按需做一些服务注册,路由配置等等工作 new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseConfiguration(configuration) //单独实例化build出来的configuration通过UseConfiguration方法加入到全局的Configuration中 .ConfigureAppConfiguration(builder => builder .AddEnvironmentVariables() .AddJsonFile("haha.json", true, true)) .ConfigureAppConfiguration((context, builder) => builder //.SetBasePath(Directory.GetCurrentDirectory()) .AddEnvironmentVariables() .AddJsonFile("haha.json", false, true)) //搞懂optional的含义,false表示json文件必需 //.ConfigureAppConfiguration(ConfigureApp) //此注释两行跟上述两行功能一致 //.ConfigureAppConfiguration(ConfigureAppConfiguration) .ConfigureLogging(builder => builder .AddConfiguration(configuration)) .ConfigureLogging((context, builder) => builder .AddConfiguration(configuration) .AddConfiguration(context.Configuration)) //注意这边Configuration的取法 //.ConfigureLogging(ConfigureLog) //此注释两行跟上述两行功能一致 //.ConfigureLogging(ConfigureLogging) //.ConfigureServices(scs => scs.AddOptions()) //.ConfigureServices((context, scs) => scs.AddOptions().Configure<JsonConfig>(context.Configuration.GetSection("Logging"))) //注意这边Configuration的取法 //.ConfigureServices(ConfigureService) //此注释两行跟上述两行功能一致 .ConfigureServices(ConfigureServiceWithConfig) //.Configure(builder => builder.Run(async context => await context.Response.WriteAsync($"测试专用{configuration["Format:DateTime:LongDatePattern"]}"))) .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" } } }
转载请注明原文地址: https://www.6miu.com/read-2631648.html

最新回复(0)