目錄:
- 簡單配置(利用configration 鍵值讀取)
- 使用選項和配置對象(自定義類綁定配置文件實現讀取)
- IOptionsSnapshot(配置文件更改時也變化)
- 內存數據放到配置對象中
- 實體框架自定義配置
- CommandLine配置(利用命令行配置)
注:這是院子里面大神提供的例子。傳送門
1.簡單配置(利用configration 鍵值讀取)
注意點多級節點用“:”冒號
public static IConfigurationRoot Configuration { get; set; }//吐槽沒有開放出來。每次都要new public HomeController() { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); Configuration = builder.Build(); var value = Configuration["option1"];//一級節點 var value2 = Configuration["Logging:IncludeScopes"];//二級節點 var value3 = Configuration["Logging:LogLevel:Default"];//三級節點 var value4 = Configuration["Patients:1:Name"];//數據情況下,去第二個元素的第一節點 }
appsettings.json 文件
{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-AspNetCoreAuthIdentity-c52f1669-ef35-4a6f-af80-47f83d0b7b98;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "option1": "value1_from_json", "option2": 2, "Patients": [ { "Name": "Gandalf", "Age": "1000" }, { "Name": "Harry", "Age": "17" } ] }
2.使用選項和配置對象(自定義類綁定配置文件實現讀取)
創建自己的類。
public class MyOptions { public MyOptions() { // Set default value. Option1 = "value1_from_ctor"; } public string Option1 { get; set; } public int Option2 { get; set; } = 5; }
項目啟動時注入到配置中Services.Configure
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); services.AddMvc(); // Add application services. services.AddTransient<IEmailSender, AuthMessageSender>(); services.AddTransient<ISmsSender, AuthMessageSender>(); // Register the IConfiguration instance which MyOptions binds against. services.Configure<MyOptions>(Configuration); }
獲取值
private readonly MyOptions _options; public HomeController(IOptions<MyOptions> options) { _options = options.Value; }
appsetting.json不用和類的字段完全一致,只要包含就可以了
3.IOptionsSnapshot(配置文件更改時也變化)
private readonly MyOptions _options; public HomeController(IOptionsSnapshot<MyOptions> options) { _options = options.Value; }
IOptionsSnapshot的作用:在配置文件修改的時候,配置數據也會變化。(刷新頁面)
4.內存數據放到配置對象中(AddInMemoryCollection)
public static IConfigurationRoot Configuration { get; set; } public HomeController() { var dict = new Dictionary<string, string> { {"Profile:MachineName", "Rick"}, {"App:MainWindow:Height", "11"}, {"App:MainWindow:Width", "11"}, {"App:MainWindow:Top", "11"}, {"App:MainWindow:Left", "11"} }; var builder = new ConfigurationBuilder(); builder.AddInMemoryCollection(dict); Configuration = builder.Build(); var vlaue = Configuration["Profile:MachineName"]; }
顧名思義,不用去配置文件中讀取,可以直接把內存中的數據放到配置對象中。【感覺有點沒必要,既然在內存中,為什么不直接用】
這里還講了一個GetValue<T>;作用:確定配置的值類型,設置默認值。用法:Configuration.GetValue<int>("App:MainWindow:Left", 80);
5.實體框架自定義配置(AddEntityFrameworkConfig)
利用EF讀取數據庫讀取數據和寫入數據。 類似利用EF 對數據庫數據操作。
1.創建實體類 2.創建DbContext 3.創建自定義配置提供程序EFConfigProvider,4.創建資源給Provider,5.AddEntityFrameworkConfig 6.讀取
代碼較多操作較多就不貼了。。
6.CommandLine配置(AddCommandLine)命令行配置
先添加引用“Microsoft.Extensions.Configuration.CommandLine”
控制台類型下,添加命令行參數

public static IConfigurationRoot Configuration { get; set; } public static Dictionary<string, string> GetSwitchMappings( IReadOnlyDictionary<string, string> configurationStrings) { return configurationStrings.Select(item => new KeyValuePair<string, string>( "-" + item.Key.Substring(item.Key.LastIndexOf(':') + 1), item.Key)) .ToDictionary( item => item.Key, item => item.Value); } public static void Main(string[] args = null) { var dict = new Dictionary<string, string> { {"Profile:MachineName", "Rick"}, {"App:MainWindow:Left", "11"} }; var builder = new ConfigurationBuilder(); builder.AddInMemoryCollection(dict) .AddCommandLine(args, GetSwitchMappings(dict)); Configuration = builder.Build(); Console.WriteLine($"Hello {Configuration["Profile:MachineName"]}"); // Set the default value to 80 var left = Configuration.GetValue<int>("App:MainWindow:Left", 80); Console.WriteLine($"Left {left}"); Console.ReadKey(); }
注意:命令行參數有一定的格式,也可以利用GetSwitchMappings自定義格式。
