我正在嘗試將 Microsoft 的“托管/日志記錄/配置/依賴項注入”用于 .Net 5.0 中的新控制臺應用程式。首先介紹一點背景知識:我對這一切完全陌生,而且我從未使用過任何在 ASP.NET 中顯然早已可用的類似內容(事實上,我認為我什至從未使用過 ASP.NET根本沒有,如果我這樣做了,那是很久以前的事了,而且在很小的程度上)。照這樣說:
我覺得我缺少一些關于配置的東西,特別是將 appsettings.json (或其他)的一部分系結到選項類。假設我有一個預先存在的類——不是專門用于 Microsoft 的 DI/等。框架 - 在其建構式中采用某種選項類:
public X(XOptions options) {
this.Blah = options.OneThirtySeventhBlah * 37;
}
我發現了如何從 appsettings.json 獲取東西到我的代碼中的各種示例:
services.Configure<XOptions>(options => hostContext.Configuration.GetSection("X").Bind(options));
但是在運行它時,我發現(令我驚訝)它不適用于我先前存在的X類。為了讓它作業,我還必須更改X的建構式(或者,我想,至少添加一個新的建構式)以采用 anIOptions<XOptions>而不是簡單地采用 an XOptions:
public X(IOptions<XOptions> options) {
this.Blah = options.Value.OneThirtySeventhBlah * 37;
}
這一切正常,但是......我在這里遺漏了什么嗎?我真的必須更改我預先存在的類(同樣,它不是專門用于這種型別的框架)以將所有這些額外的 Microsoft 東西作為依賴項嗎?
我想我可以改寫一個MicrosoftifiedX類,IOptions<XOptions>在它的建構式中使用一個并實作與它相同的介面X,并將該部分作為可選包的一部分,但是......就像我說的,我覺得我錯過了一些東西。我真的可以不直接將配置系結到XOptions嗎?如果可以,怎么做?
如果我不能,那么我不禁想象可能有一些標準(或至少相當普遍)的框架/模式/庫來處理這個問題,這比我的MicrosoftifiedX想法更乏味。有沒有人知道這樣的事情?謝謝。
uj5u.com熱心網友回復:
是的,您可以并且在我看來您應該防止讓您的業務線類依賴于IOption<T>. 相反,將選項物件注冊為單例:
XOptions xoptions = config.GetSection("SectionName").Get<XOptions>();
// Verify XOptions here (if required)
// Register XOptions as singleton
services.AddSingleton<XOptions>(xoptions);
services.AddTransient<IX, X>(); // X takes a dependency on XOptions
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/344053.html
下一篇:這是否違反了開放/封閉原則?
