C 筆記3 依賴注入 初始化服務配置

2021-10-08 21:59:30 字數 3992 閱讀 9118

乙個服務可以注入另乙個服務中,也可以用來初始化乙個帶有選項的服務。不能使用服務的建構函式定義非服務協定來初始化,因為容器不知道如何初始化它。服務是必要的,但是為了傳遞服務選項,還可以使用已經可用於.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 "

;}

注意

ioptions介面和用於選項的服務在nuget包microsoft.extensions.options中實現

為了便於使用di容器註冊服務,定義了擴充套件方法addgreetingservice。該方法擴充套件了iservicecollection介面,並允許通過委託傳遞greetingserviceoptions。在實現**中,configure方法用於通過ioptions介面指定配置,configure方法是nugetmicrosoft.extensions.options中iservicecollection的擴充套件方法。

**檔案 diwithoptions/

greetingserviceextensions.cs

public

static

class

greetingserviceextensions

}

通過建構函式注入使用greetingservicehomecontroller不需要任何更改。

**檔案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

命名空間

microsoft.extensions.configuration

microsoft.extensions.dependencyinjection

microsoft.extensions.options

示例**基於之前的,但是現在用配置擴充套件選項。不需要更改greetservice類,他仍然使用ioptions進行初始化。更改的是addgreetingservice擴充套件方法,這就更容易使用服務。該方法的第二個引數現在是iconfiguration型別,以接收配置值。config引數用於將其傳遞給configure擴充套件方法。configure方法與前面使用的方法不同;這個方法在nuget包microsoft.extensions.options.configurationextensions中定義

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...