我正在開發一個 .Net 6.0 ASP.NET Core Web 應用程式,appsettings.json在應用程式啟動后出于管理目的對其進行編輯。要編輯的資訊如下所示:
{
"Admin": {
"WhiteList": ["::1",.....]
},
....
這被建模為
public class AdminOptions
{
public const string Admin = "Admin";
public string[] WhiteList { get; set; }
}
并配置Program.cs如下:
...
ver builder = WebApplication.CreateBuilder(args);
builder.Services.Configuraion<AdminOptions>(
builder.Configuration.GetSection(AdminOptions.Admin));
AdminOptions被建構式注入到 Singleton 服務中,如下所示:
public class WhiteChecker: IWhiteChecker
{
private readonly IOptionsMonitor<AdminOptions> optionsMonitor;
public WhiteChecker(IOptionsMonitor<AdminOptions> monitor)
{
optionsMonitor = monitor;
}
.....[optionsMonitor.CurrentValue.WhiteList is consumed here].....
}
如果appsettings.json在專案根目錄中被編輯,則IOptionsMonitor.CurrentValue回傳部分中預系結WhiteList屬性的編輯后值Admin,如預期的那樣。
但是,如果AppContext.BaseDirectory編輯了(我認為是正確的位置)中的那個,則IOptionsMonitor忽略。
我嘗試在構建之前WebApplicationBuilder.Environment.ContentRootPath(默認設定為專案根目錄)進行更改,但結果相同。AppContext.BaseDirectoryWebApplicationBuilderProgram.cs
有什么方法可以配置IOptionsMonitor來回應 in 的變化appsettings.json嗎Appcontext.BaseDirectory?還是我誤解了什么?
uj5u.com熱心網友回復:
根據 Microsoft 提供的檔案,該問題聽起來像一個非問題。我從這個頁面參考:
在開發程序中,內容根目錄默認為專案的根目錄。此目錄也是應用程式內容檔案和 Web 根目錄的基本路徑。通過在構建主機時設定其路徑來指定不同的內容根。有關詳細資訊,請參閱內容根。
相同的頁面,不同的錨點:
CreateDefaultBuilder 方法:
- 將內容根設定為GetCurrentDirectory回傳的路徑。
簡而言之...
您看到的是預期的行為:專案的開發根目錄,以及在某處部署時,為作業目錄設定的任何內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/511423.html
標籤:网应用设置选项监视器
