元件工廠在建立元件時將通過一定的策略選定特定的建構函式,然後進行構造。
建構函式的選擇策略是:
1. 如果遍歷的建構函式如果含有引數,那麼容器先檢查建立上下文中是否含有指定的引數陣列或命名引數字典,如果有則選擇該建構函式,反之則遍歷建構函式的引數,判斷每乙個引數是否可以進行注入,如果都可以進行注入則選擇該建構函式建構函式的引數檢測策略是:2. 如果建構函式沒有引數則選擇該建構函式
3. 將上面的兩個步驟生成的建構函式列表進行按照構造函式引數的個數進行降序排列(建構函式的選擇原則是引數越多將被首先選擇)
4. 在步驟3的列表 中找出貼有injectattribute標籤的建構函式,如果找到則選擇該建構函式,如果找不到則選擇步驟3列表中的第乙個建構函式。
1. 引數是否貼有標籤injectattribute和injectmanyattribute,如果有則根據標籤的約束條件檢查該引數是否被di容器註冊過,如果註冊過,則該引數符合條件,反之不符合條件下面通過例項進行學習:2. 如果引數沒有標籤injectattribute和injectmanyattribute,則根據引數的型別檢查是否被di容器註冊過,如果註冊過,則該引數符合條件,反之不符合條件
1. 乙個簡單例子,不帶標籤的例子
[contract]inte***ce ihorse
[component]
class redhorse : ihorse
class blackhorse : ihorse
class person2 : iperson
public ihorse horse
public person2(ihorse horse)
public person2()
}[test]
public
void constructorinjecttest()
2. 含有標籤的建構函式例子:
class person5 : ipersonpublic ihorse horse
public a a
public
bool hasvisited
[inject]
public person5(ihorse horse,a a)
[inject]
public person5(ihorse horse)
public person5()
}[test]
public
void constructorinject2test()
mini 容器官方**:
mini容器介紹
mini容器學習目錄
mini容器學習目錄1——環境搭建(基礎篇)
mini 容器學習筆記2——元件元資料(基礎篇)
mini 容器學習筆記3——元件的註冊(基礎篇)
mini 容器學習筆記4——元件的生命週期(應用篇)
mini 容器學習筆記5——元件的獲取
mini 容器學習筆記6——元件的獲取(應用)
mini 容器學習筆記7——建構函式注入
mini 容器學習筆記8——字段注入
mini 容器學習筆記9——屬性注入
mini 容器學習筆記10——方法注入
mini 容器學習筆記11——lazy注入
mini 容器學習筆記12——組合例項
mini 容器學習筆記13——外掛程式注入
mini 容器學習筆記14——異常處理
mini 容器學習筆記15——***-初始化***
mini 容器學習筆記16——***-釋放***
mini 容器學習筆記17——***-啟動/停止***
mini 容器學習筆記18——***-aop***
Mini 容器學習筆記11 Lazy注入
lazy注入指的是在注入的成員變數或構造函式引數變數或函式引數變數的型別上包裹乙個lazy型別,該注入方式是借鑑了mef思想。具體 testfixture public class lazyinjectiontest testbase class component i contract class...
C 學習7 建構函式
當建立乙個物件時,往往需要做一些初始化工作,例如對資料成員賦值等。為了解決這個問題,c 提供了建構函式。建構函式 constructor 是一種特殊的成員函式,它的名字和類名相同,沒有返回值,不需要使用者呼叫 使用者也不能呼叫 而是在建立物件時自動執行。建構函式的作用是在建立物件時進行初始化工作,最...
C string容器 建構函式
本質 string是c 風格的字串,而string本質上是乙個類 string和char區別 1.char是乙個指標 2.string是乙個類,類內部封裝了char 管理這個字串,是乙個char 型的容器 string建構函式原型 1.string 建立乙個空的字串,例如 string str 2....