在我的應用程序(基於MVVM架構的WPF應用程序)中,我使用了很多ICommand
s作爲服務。其中一些命令可以綁定到菜單項,工具欄,狀態欄等,在那裏它們被注入到相應的容器視圖模型中。現在,它們中的一些例如能夠操作應用程序的Shell上的數據,所以Shell是它們的依賴關係。由於Shell也承載所述容器(菜單,狀態欄...),我得到一個循環依賴。 (Shell - > Menu - > Command - > Shell)。循環依賴和控制反轉 - 如何解決這些問題?
目前,我使用MEF編寫我的應用程序,所以大多數時候問題可以通過屬性或私人成員注入來解決,但我有這種感覺這是一種討厭的做法(服務沒有辦法告訴父母它需要這種依賴性,儘管它確實需要)。
我的問題是:什麼是要解決這樣的問題的常用方法:
class Shell : IShell
.ctor(IMenu)
class Menu : IMenu
.ctor(ICommand[])
class ExitCommand : ICommand
.ctor(IShell)
從父視圖模型('Shell')調用命令或具有全局可用命令的兩種常見方法是'EventAggregator'實現('Prism'中的'PubSubEvent')或'CompositeCommand'(再次從'Prism' )。 – mechanic
什麼是「殼」?你能更詳細地描述它嗎? – Joe
@Joe外殼主要是一個視圖模型,它充當所有其他視圖組件的容器。 – artganify