using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Diagnostics; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.EnvironmentVariables; using Microsoft.Extensions.Configuration.CommandLine; using Microsoft.Extensions.Configuration.Memory; using Microsoft.Extensions.Configuration.Xml; using Microsoft.Extensions.Configuration.Ini; using Microsoft.Extensions.Configuration.Binder; using Microsoft.Extensions.Configuration.KeyPerFile; using Microsoft.Extensions.Configuration.Json; using Microsoft.Extensions.Configuration.UserSecrets; using Microsoft.Extensions.Options; using NetEscapades.Configuration.Yaml; using Microsoft.Extensions.DependencyInjection; using System.Reflection; namespace HttpClientStudy.Config { public static class WebApiConfigExtensions { /// /// 添加WebApi配置文件 /// public static IConfigurationBuilder AddWebApiConfiguration(this IConfigurationBuilder configuration) { /* //应用程序信息 //程序的上下文基准目录:通常是应用程序启动时的目录,也可以理解为包含可执行文件的目录 Console.WriteLine($"应用程序的基准目录[AppContext.BaseDirectory] = {AppContext.BaseDirectory}"); //程序安装或启动基目录 Console.WriteLine($"程序安装或启动基目录[AppDomain.CurrentDomain.SetupInformation.ApplicationBase]:{AppDomain.CurrentDomain.SetupInformation.ApplicationBase}"); //进程主模块的完整路径 Console.WriteLine($"进程主模块的完整路径[Process.GetCurrentProcess().MainModule.FileName]:{Process.GetCurrentProcess()?.MainModule?.FileName}"); //环境变量:当前工作目录 Console.WriteLine($"当前工作目录[Environment.CurrentDirectory]:{Environment.CurrentDirectory}"); //文件当前目录:当前工作目录:不一定是启动目录 Console.WriteLine($"文件当前目录[Directory.GetCurrentDirectory()]:{Directory.GetCurrentDirectory()}"); //可执行程序集目录 Console.WriteLine($"可执行程序集目录[Assembly.GetExecutingAssembly().Location]:{Assembly.GetExecutingAssembly().Location}"); //指定程序集目录:可以是引用类库、指定类所在类库目录 Console.WriteLine($"指定程序集目录[Type.Assembly.Location]:{typeof(WebApiConfigExtensions).Assembly.Location}"); */ //配置文件根目录:配置项目Dll文件所在目录(被其它项目引用时,引用后dll的文件所在目录) string configDellPath = Path.GetDirectoryName(typeof(WebApiConfig).Assembly.Location) ?? Directory.GetCurrentDirectory(); configuration.SetBasePath(configDellPath); Console.WriteLine($"配置文件根目录:{configDellPath}"); configuration.AddJsonFile($"ConfigFiles/Config.json", optional: false, reloadOnChange: true); configuration.AddJsonFile($"ConfigFiles/Config.{System.Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true, reloadOnChange: true); return configuration; } /// /// 使用选项模式 /// /// /// public static IServiceCollection AddWebApiOptions(this IServiceCollection services) { services.AddOptions(); var configuration = services.BuildServiceProvider().GetService(); if (configuration == null) { throw new InvalidOperationException("Configuration is not configured."); } services.Configure(configuration.GetSection("WebApi")); return services; } } }