我不確定這是否可能,但我認(rèn)為值得一問(wèn)。我們有許多對(duì)象,這些對(duì)象具有其他子對(duì)象的層次結(jié)構(gòu)。我們不使用一系列 IEnumerable 集合,而是使用字典,這樣當(dāng)在 MongoDb 中查詢數(shù)據(jù)時(shí),可以輕松/快速地遍歷層次結(jié)構(gòu)。例如:在主模型中,我們有類(lèi)似的內(nèi)容:public Dictionary<string, TopLevelGroup> TopGroups { get; set; }然后在 TopLevelGroup 中我們有類(lèi)似的內(nèi)容:public Dictionary<string, SecondLevelGroup> SecondLevelGroups { get; set; }鍵必須是一個(gè)字符串,以便它可以作為 ReferencedDictionary 存儲(chǔ)在 Mongo 中(我認(rèn)為這是正確的),并且可以通過(guò)執(zhí)行以下操作來(lái)訪問(wèn)數(shù)據(jù):TopLevelGroup[keyA].SecondLevelGroup[keyB].Property所有鍵都是對(duì)象的 id 屬性(它們也有一個(gè)通用的 IDocument 接口,它要求所有文檔都有一個(gè) Id ...當(dāng)然)。所以我想要在 AutoFixture 中做的是讓所有自動(dòng)生成的字典都使用對(duì)象的 Id 作為鍵(而不是隨機(jī)生成的字符串)。我懷疑這有點(diǎn)瘋狂并且不受支持,但我想問(wèn)一下以防萬(wàn)一,因?yàn)槲夷壳安惶私?AutoFixture。
1 回答

慕森王
TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
不,這一點(diǎn)也不瘋狂,而且是受支持的。
這種情況正是定制方法的用處。
使用該方法,您可以自定義對(duì)象的創(chuàng)建方式。
你也許可以這樣做:
fixture.Customize<TopLevelGroup>( ????c?=>?c.With( ????????propertyPicker:?x?=>?x.SecondLevelGroups,? ????????valueFactory:?(IEnumerable<SecondLevelGroup>?input)?=>?input.ToDictionary(y?=>?y.Id))); fixture.Customize<MainModel>( ????c?=>?c.With( ????????propertyPicker:?x?=>?x.TopGroups,? ????????valueFactory:?(IEnumerable<TopLevelGroup>?input)?=>?input.ToDictionary(y?=>?y.Id)));
該With
方法用于指定屬性的值。第一個(gè)參數(shù)是 propertypicker,例如x => x.SecondLevelGroups
第二個(gè)參數(shù)是一個(gè)值或一個(gè) valuefactory。valuefactory 可以接受一個(gè)輸入,自動(dòng)固定裝置將填充該輸入。例如,IEnumerable<SecondLevelGroup>
我們可以將其轉(zhuǎn)換為具有我們想要的鍵的字典。
- 1 回答
- 0 關(guān)注
- 133 瀏覽
添加回答
舉報(bào)
0/150
提交
取消