乙個服務可以注入另乙個服務中,也可以用來初始化乙個帶有選項的服務。不能使用服務的建構函式定義非服務協定來初始化,因為容器不知道如何初始化它。服務是必要的,但是為了傳遞服務選項,還可以使用已經可用於.net core的服務。
示例diwithoptions使用以下的包和命名空間
包microsoft.extensions.dependencyinjection
microsoft.extensions.options
命名空間system
microsoft.extensions.dependencyinjection
microsoft.extensions.options
**檔案 diwithoptions/
greetingserviceoptions.cs
public
class
greetingserviceoptions
}
可以指定帶有ioptions引數的建構函式,來傳遞服務選項。前面定義的greetingserviceoptions是用於ioptions的泛型型別。
**檔案diwithoptions/
greetingservice.cs
class
greetingservice
:igreetingservice
,greeting from "
;}
注意為了便於使用di容器註冊服務,定義了擴充套件方法addgreetingservice。該方法擴充套件了iservicecollection介面,並允許通過委託傳遞greetingserviceoptions。在實現**中,configure方法用於通過ioptions介面指定配置,configure方法是nuget包microsoft.extensions.options中iservicecollection的擴充套件方法。ioptions介面和用於選項的服務在nuget包microsoft.extensions.options中實現
**檔案 diwithoptions/
greetingserviceextensions.cs
public
static
class
greetingserviceextensions
}
通過建構函式注入使用greetingservice的homecontroller不需要任何更改。
**檔案diwithoptions/
homecontroller.cs
public
class
homecontroller
public
string
hello
(string name)
=> _greetingservice.
greet
(name)
;}
現在可以使用輔助方法addgreetingservice註冊服務。greetingservice的配置是通過傳遞所需選項來完成的。還需要乙個實現了ioptions的服務。在這裡可以使用addoptions擴充套件方法。該方法新增了幾個介面,並將其對映到與選項一起使用的實現
**檔案 diwithoptions/
program.cs
static
void
main()
static
void
greeting()
);services.
addtransient
<
homecontoller
>()
;return services.
buildserviceprovider()
;}using
(var container =
registerservices()
)}執行結果:hello,katharina,
greetings
from christian
需要在配置檔案中配置服務時,有一種更直接的方法:可以使用.net配置特性和對選項的擴充套件。使用nuget包microsoft.extensions.options.configurationextensions中的配置可以擴充套件選項。
包microsoft.extensions.configuration
microsoft.extensions.configuration.json
microsoft.extensionsdependencyinjection
microsoft.extensions.options
microsoft.extensions.options.configurationextensions
命名空間示例**基於之前的,但是現在用配置擴充套件選項。不需要更改greetservice類,他仍然使用ioptions進行初始化。更改的是addgreetingservice擴充套件方法,這就更容易使用服務。該方法的第二個引數現在是iconfiguration型別,以接收配置值。config引數用於將其傳遞給configure擴充套件方法。configure方法與前面使用的方法不同;這個方法在nuget包microsoft.extensions.options.configurationextensions中定義microsoft.extensions.configuration
microsoft.extensions.dependencyinjection
microsoft.extensions.options
public
static
class
greetingserviceextensions
}
public
static
iconfiguration configuration
=defineconfiguration()
;static
iconfiguration
defineconfiguration()
配置檔案指定greetingservice配置的from設定。
}
servicecollection的配置和以前一樣。還需要指定ioptions介面。不同的是,addgreetingservice擴充套件方法的新版本傳遞了iconfiguration值。這可以通過訪問configuration屬性來完成,該屬性定義為讀取greetingservice部分,它傳遞包含該部分的值。
static
void
main()
static
void
greeting()
using
(var container =
registerservices()
)}
Spring IoC容器的初始化和依賴注入
bean的定義和初始化springioc容器是兩大步驟,bean的定義,然後再初始化springioc容器和依賴注入 1 resource 定位,這步是spring ioc容器根據開發者的配置,進行資源定位,在spring的開發中,我們可以通過xml或者註解方式進行配置。2 beandefiniti...
Solon 開發,八 注入依賴與初始化
solon 強調 有克制的注入 手動控制 結合的模式。好處是,用料少 啟動快。bean 的關鍵生命節點 節點說明 1.constructor 構造方法 不支援引數注入 2.inject 注入 基於訂閱,不確定具體依賴什麼時候會被注入 3.init 初始化 在容器掃瞄完成時執行,所有的依賴注入已完成 ...
學習c 3 初始化列表
一 1 物件初始化列表出現原因 1.必須這樣做 如果我們有乙個類成員,它本身是乙個類或者是乙個結構,而且這個成員它只有乙個帶引數的建構函式,沒有預設建構函式。這時要對這個類成員進行初始化,就必須呼叫這個類成員的帶引數的建構函式,如果沒有初始化列表,那麼他將無法完成第一步,就會報錯。2 類成員中若有c...