0
我不太確定DryIoc是否值得我度過。它看起來像輕量級,並且在跨平臺環境中(Xamarin)很好地支持。但我感覺有點困難(就我自己而言)。 DryIoc社區也不是很大(通過閱讀關於DryIoc的一些答案,我認識到,看起來只有作者跳入並給出答案=))。這是我在標題中提到的問題。假設我有2視圖模型類,第二與第一的屬性,它應該始終與(映射)的屬性,像這樣:從另一註冊對象的另一個屬性注入屬性值?
public class ParentViewModel {
}
public class FirstViewModel {
public FirstViewModel(ParentViewModel parent){
}
public string A {
//...
}
}
public class SecondViewModel {
public SecondViewModel(ParentViewModel parent){
}
public string A {
//...
}
}
現在我可以用dryioc爲雙方的ViewModels但對於登記單第二個,我也需要從第一個屬性A中注入屬性A的值。
container.Register<ParentViewModel>();
container.Register<FirstViewModel>(reuse: Reuse.Singleton, made: Made.Of(() => new FirstViewModel(Arg.Of<ParentViewModel>())));
container.Register<SecondViewModel>(reuse: Reuse.Singleton, made: Made.Of(() => new SecondViewModel(Arg.Of<ParentViewModel>())));
因此,您可以看到第一次註冊應該沒問題,因爲不需要屬性依賴關係。但第二個應該有A
屬性取決於第一個A
。
真的,我不能自己探索這個。注射性能有一定的註冊類型的是好的(至少我知道如何做到這一點),但這裏的注入值一些註冊類型他人財產。
我希望作者(像往常一樣)會跳進來幫助我。非常感謝。
非常感謝。爲了您的更好的建議,您認爲它適合於隨時可以在運行時更改的動態內容('A')嗎?這是否意味着我們需要在每次更改時都注入它?無論如何,這聽起來對我來說真的是一個更好的解決方案,我對整體IoC並不是很熟悉,所以我認爲最初設置的一切都是***,而不是在某個過程中,所以也許這就是爲什麼我一開始沒有想到你建議的解決方案。 – Hopeless
簡單,如果它是一個動態屬性,只需將它傳遞給一個正常的方法。不要注射。 – dadhi
我認爲這是在這種情況下映射屬性的情況(所以它是自動的)。手動進行(設置)需要您記住每次創建VM時進行設置。實際上,如果你在樹中組織虛擬機,這可能很容易(因此一個屬性可以輕鬆地在同一棵樹中引用另一個屬性,或者即使我不需要在這樣的樹中引用同一對象的不同集線器,只需一個就足夠了。但是我真的覺得構建這樣一棵樹並不是鬆散耦合,測試虛擬機可能會更困難。 – Hopeless