4

在傳統的MDI應用程序中,當命令發生時(例如按下功能區按鈕),會創建一些對象(窗體),所以它可能是一個構圖點。我對這種應用程序中的構圖根源感到困惑。我在某處讀到,我們可以使用ViewModelLocator,它看起來像服務定位器模式。如你所知,服務定位器模式遭到一些人的譴責。WPF MDI應用程序中的組合根在哪裏?

現在請就此問題給我建議。

在此先感謝。

回答

7

ViewModelLocator是否爲服務定位器depends partly on its signaturepartly on its role

在任何情況下,WPF應用程序的組合根是OnStartup method - 無論應用程序是否爲MDI應用程序都不會改變這一點。

由於在MDI應用程序中可以有任意數量的子窗口,因此很可能需要抽象工廠來創建每個ViewModel。

+0

非常感謝, 而且一般來說,我希望我的視圖模型能夠容納UnitOfWork(UnitOfWork per Form)。我應該使用抽象工廠方法的方法注入嗎?換句話說,抽象工廠方法接收單元抽象和其他東西來找出合適的視圖模型來創建。這是對的嗎? – 2012-01-31 20:09:38

+0

另一個問題是誰應該創建表單實例?它可以是抽象工廠嗎?我使用UserControls作爲我的表單。 – 2012-01-31 20:20:07

+0

一個UoW基本上是一個短暫的依賴關係,所以這聽起來像一個(注入)抽象工廠最好創建的東西。 – 2012-01-31 20:32:27