網站首頁 編程語言 正文
相關文章
ASP.NET Core2.2 中的Configuration配置一
ASP.NET Core2.2 中的Configuration配置二
1.內存配置
MemoryConfigurationProvider使用內存中集合作為配置鍵值對。若要激活內存中集合配置,請在ConfigurationBuilder的實例上調用AddInMemoryCollection擴展方法。可以使用IEnumerable
public class Program { public static readonly Dictionary_dict = new Dictionary { {"MemoryCollectionKey1", "value1"}, {"MemoryCollectionKey2", "value2"} }; public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddInMemoryCollection(_dict); }) .UseStartup (); }
而通過啟動應用程序時會看到如下配置信息:
1.1GetValue
ConfigurationBinder.GetValue
public Startup(IConfiguration configuration) { Configuration = configuration; var config = Configuration.GetValue("MemoryCollectionKey1", "value3"); }
而通過啟動應用程序時會看到如下配置信息:
ConfigurationBinder.GetValue找到定義string類型MemoryCollectionKey1鍵值并輸出。如果我們把獲取鍵名稱更改為MemoryCollectionKey3,再來看看獲取鍵值輸出結果:
我們會看到當ConfigurationBinder.GetValue找不到定義string類型MemoryCollectionKey3鍵時,則輸出默認值。
2.綁定到實體類
可以使用選項模式將文件配置綁定到相關實體類。配置值作為字符串返回,但調用Bind 可以綁定POCO對象。Bind在Microsoft.Extensions.Configuration.Binder包中,后者在 Microsoft.AspNetCore.App元包中。現在我們在CoreWeb/Models目錄下新增一個叫starship.json文件,配置內容如下:
{ "starship": { "name": "USS Enterprise", "registry": "NCC-1701", "class": "Constitution", "length": 304.8, "commissioned": false }, "trademark": "Paramount Pictures Corp. http://www.paramount.com" }
然后再新增一個對應配置內容的實體模型(/Models/Starship.cs):
public class Starship { public string Name { get; set; } public string Registry { get; set; } public string Class { get; set; } public decimal Length { get; set; } public bool Commissioned { get; set; } }
構建主機時調用ConfigureAppConfiguration以指定應用程序的配置:
public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.SetBasePath(Directory.GetCurrentDirectory()); config.AddJsonFile( "starship.json", optional: true, reloadOnChange: true); }) .UseStartup();
示例應用程序調用GetSection方法獲取json文件中starship鍵。通過Bind方法把starship鍵屬性值綁定到Starship類的實例中:
var starship = new Starship(); Configuration.GetSection("starship").Bind(starship); var _starship = starship;
當應用程序啟動時會提供JSON文件配置內容:
3.綁定至對象圖
通過第2小節我們學習到如何綁定配置文件內容映射到實例化實體類屬性去,同樣,配置文件內容也可以綁定到對象圖去。現在我們在CoreWeb/Models目錄下新增一個叫tvshow.xml文件,配置內容如下:
Dr. Who The Sun Makers 11/26/19774 Tom Baker, Louise Jameson, John Leeson (c)1977 BBC https://www.bbc.co.uk/programmes/b006q2x0
然后再新增一個對應配置內容的實體模型(/Models/TvShow.cs),其對象圖包含Metadata和 Actors類:
public class TvShow { public Metadata Metadata { get; set; } public Actors Actors { get; set; } public string Legal { get; set; } } public class Metadata { public string Series { get; set; } public string Title { get; set; } public DateTime AirDate { get; set; } public int Episodes { get; set; } } public class Actors { public string Names { get; set; } }
構建主機時調用ConfigureAppConfiguration以指定應用程序的配置:
config.AddXmlFile("tvshow.xml", optional: true, reloadOnChange: true);
使用Bind方法將配置內容綁定到整個TvShow對象圖。將綁定實例分配給用于呈現的屬性:
public Startup(IConfiguration configuration) { Configuration = configuration; var tvShow = new TvShow(); Configuration.GetSection("tvshow").Bind(tvShow); var _tvShow = tvShow; }
當應用程序啟動時會提供XML文件配置內容:
還有一種Bind方法可以將配置內容綁定到整個TvShow對象圖:
public Startup(IConfiguration configuration) { Configuration = configuration; var _tvShow = Configuration.GetSection("tvshow").Get(); }
當應用程序啟動時會提供XML文件配置內容:
4.將數組綁定至類
Bind方法也支持把配置內容鍵中的數組綁定到對象類去。公開數字鍵段(:0:、:1:、… :{n}:)的任何數組格式都能夠與POCO類數組進行綁定。使用內存配置提供應用程序在示例中加載這些鍵和值:
public class Program { public static DictionaryarrayDict = new Dictionary { {"array:entries:0", "value0"}, {"array:entries:1", "value1"}, {"array:entries:2", "value2"}, {"array:entries:4", "value4"}, {"array:entries:5", "value5"} }; public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.SetBasePath(Directory.GetCurrentDirectory()); config.AddInMemoryCollection(arrayDict); }) .UseStartup (); }
因為配置綁定程序無法綁定null值,所以該數組跳過了索引#3的值。在示例應用程序中,POCO類可用于保存綁定的配置數據:
public class ArrayExample { public string[] Entries { get; set; } }
將配置數據綁定至對象:
public Startup(IConfiguration configuration) { Configuration = configuration; var arrayExample = new ArrayExample(); Configuration.GetSection("array").Bind(arrayExample); var _arrayExample = arrayExample; }
還可以使用ConfigurationBinder.Get
public Startup(IConfiguration configuration) { Configuration = configuration; var _arrayExample = _config.GetSection("array").Get(); }
當應用程序啟動時會提供內存配置內容:
5.在Razor Pages頁或MVC視圖中訪問配置
若要訪問RazorPages頁或MVC視圖中的配置設置,請為Microsoft.Extensions.Configuration命名空間添加using指令(C#參考:using指令)并將IConfiguration注入頁面或視圖。
在Razor頁面頁中:
@page @model IndexModel @using Microsoft.Extensions.Configuration @inject IConfiguration ConfigurationIndex Page Access configuration in a Razor Pages page
Configuration value for 'key': @Configuration["key"]
在MVC視圖中:
@using Microsoft.Extensions.Configuration @inject IConfiguration ConfigurationIndex View Access configuration in an MVC view
Configuration value for 'key': @Configuration["key"]
原文鏈接:https://www.cnblogs.com/wzk153/p/11264554.html
相關推薦
- 2022-03-10 Winform自定義控件在界面拖動、滾動鼠標時閃爍的解決方法_C#教程
- 2023-03-17 python?函數、變量中單下劃線和雙下劃線的區別詳解_python
- 2022-11-18 Python?ndarray?數組的變形詳情_python
- 2021-12-09 Quartz在.NET中的使用教程_實用技巧
- 2022-07-22 C/C++冒泡排序
- 2022-02-03 騰訊云服務器連接失敗,啟動報錯:A start job is running for /etc/rc
- 2022-04-24 .NET?CORE?鑒權的實現示例_實用技巧
- 2022-10-17 C++中友元類和嵌套類使用詳解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支