Unity容器構造函式引數迴圈引用問題及解決

2022-09-24 05:21:12 字數 1680 閱讀 1063

unity .net5 .net6 迴圈引用 迴圈依賴 quartz stdschedule***ctory

在.net6/.net5環境中,使用unity替換預設容器,用到了quartz任務管理,發現在註冊ischedule***ctory為stdschedule***ctory後,獲取ischedule***ctory會報錯:

根據報錯推測是產生了迴圈引用,導致堆疊溢位;

進一步嘗試發現不用unity用預設容器,沒有這個問題;

直接看解決方法,到文章末尾。

定義測試實體

public class testmodel

public string name

public testmodel()

//自身引用; 注意這裡

public testmodel(testmodel model)

}

定義介面及實現

public inte***ce itest

public class testimpl : itest

//用unity容器時,model定義成迴圈引用了,會報錯

public testimpl(testmodel model)

public string hello(string name)";}

}

應用註冊及獲取itest

預設容器執行正常

引用unity容器:略

再次執行,報錯

這是個很「奇怪」的問題,介面實現類testimpl,因為有乙個「沒用到」的建構函式,其引數testmodel有乙個「沒用到」的建構函式,引用自身;會導致unity容器獲取該介面時報錯。好繞,看圖。

看「起因」quartz中的介面實現stdschedule***ctory,namevaluecollection有引用自身的建構函式。

解決辦法:刪除介面實現中的帶參建構函式或自身引用的建構函式都可以;但在涉及三方dll的時候不方便。

更好的辦法:對自身引用的引數做下註冊。

新增註冊之後,執行正常。

C string容器 建構函式

本質 string是c 風格的字串,而string本質上是乙個類 string和char區別 1.char是乙個指標 2.string是乙個類,類內部封裝了char 管理這個字串,是乙個char 型的容器 string建構函式原型 1.string 建立乙個空的字串,例如 string str 2....

C vector容器 建構函式

vector資料結構和陣列非常相似,也稱為單端陣列,在陣列的尾段可以做插入,刪除操作 vector不同於普通陣列,vector可以動態擴充套件 動態擴充套件 並不是在原空間之後續接新空間,而是找更大的記憶體空間,然後將原資料拷貝新空間,釋放原空間 vector容器結構 vector容器的迭代器是支援...

C 序列容器建構函式

序列容器 sequential container vector,list,deque 序列容器介面卡 sequential container adaptor stack,queue,priority queue 建構函式如下 cc 建立乙個名稱為c的空容器,c為容器型別,例如vector,t 為...