0
A
回答
1
這個問題是所有關於設計和簡單的噴油器只是composition root某處的實現細節。
我在這裏寫了另一個answer關於Windows窗體的類似問題的計算器。這個答案中的想法對於WPF來說並沒有什麼不同。
有幾種可能做到這一點取決於: - 有多少,除了主窗口,則需要Windows - 做其他的窗口也需要導航到其他窗口或其他窗口只能從主開窗戶 - 窗戶的生活方式是什麼。它通常是相當困難的。如果應用程序只是由幾個窗口和窗口可以有一個單身的生活方式,只是把所需要的窗口中創建一個用於應用
- 的完整生命週期真正的單窗口主窗口的構造函數。如果生活方式不能單身,你可以在每個窗口注入
Func<T>
工廠方法。 - 使組成根的第一個或主窗口部分。放入容器作爲構造函數參數,並在顯示它們之前直接從容器中解析其他窗口。在這種情況下,這個窗口的唯一責任就是打開/顯示應用程序窗口。
- 創建
INavigationService
與實現也構成根 - 的一部分使用的MVVM工具,如Caliburn Micro並直接重定向在卡利引導程序類
GetInstance()
方法簡單注射器容器 - 做一個完整的設計變化..
可能性1,2和4很容易實現。以最簡單的形式NavigationService
也非常簡單,看起來是這樣的:
public class NavigationService : INavigationService
{
private readonly Container container;
public NavigationService(Container container)
{
this.container = container;
}
public void ShowView<TView>() where TView : Window
{
var view = this.CreateWindow<TView>();
view.Show();
}
public bool? ShowDialog<TView>() where TView : Window
{
var view = this.CreateWindow<TView>();
return view.ShowDialog();
}
private Window CreateWindow<TView>() where TView : Window
{
return this.container.GetInstance<TView>();
}
}
如果我們將然而就這一換個角度,我們可以創建一個設計,在本質上,這設計處理的UI版本commands和queries。這些模式將真正解決您的問題,無論是在商業層和UI方面。
在大多數LOB應用程序中,通常會打開一個屏幕以進行選擇或選擇,另一部分是讓用戶輸入數據並將其保存到某個數據存儲區的屏幕。如果我們從抽象層面考慮這個問題,那麼通過一塊UI來處理這個問題並不重要,以便讓用戶進行交互。我們可以將其視爲查詢或編輯某個服務的數據的服務。這可能是一個web服務,但也可以直接用戶。
定義一些簡單的接口,並使用MVVM設計模式,我們可以創建視圖模型的實現裏面做只是這:
public interface IEditViewModel<TEntity>
{
EditResult EditEntity(TEntity entityToEdit, DialogHandler dialogHandler);
}
public interface IChooseViewModel<TEntity>
{
TEntity ChooseEntity(DialogHandler dialogHandler);
}
public class ChooseEntityService
{
private readonly Container container;
private readonly DialogHandler dialogHandler;
public ChooseEntityService(Container container, DialogHandler dialogHandler)
{
this.container = container;
this.dialogHandler = dialogHandler;
}
public TEntity ChooseEntity<TEntity>()
{
var viewModel = this.container.GetInstance<IChooseViewModel<TEntity>>();
return viewModel.ChooseEntity(this.dialogHandler);
}
}
在窗口需要選擇我們注入ChooseService
客戶。該服務將找到正確的實現,並且DialogHandler
將是一個實現,它顯示了您最喜愛的MVVM工具的視圖。
This answer更詳細地介紹了此設計。
相關問題
- 1. 簡單的注入器打開通用裝飾器
- 2. 打開新視圖單擊DataGrid元素(WPF xaml應用程序)
- 3. 如何使用簡單注入器依賴的WPF控件
- 4. 將視圖注入容器MVVM WPF
- 5. 當使用注入片段打開視圖時發生InflateException
- 6. 使用NavigationView打開新視圖(android)
- 7. 使用簡單注射器
- 8. Collectionview單元格打開新視圖
- 9. 使用簡單注射器注入控制檯應用程序
- 10. 使用簡單注射器進行靜態類別的注入
- 11. 使用動態過濾器在新窗口中打開視圖
- 12. 簡單的方法來打印WPF中的整個樹視圖
- 13. 使用簡單注射器註冊開放通用單身人士
- 14. 使用「簡單」活動打開TabActivity
- 15. 如何從集合視圖控制器打開新的視圖
- 16. 打開新視圖iOS應用程序
- 17. 使用簡單注射器將控制器注入SignalR集線器
- 18. 從另一個WPF表單打開一個新的WPF表單
- 19. 圖片地圖新視圖打開
- 20. 在新任務中打開另一個視圖WPF caliburn.micro c#
- 21. 使用通用資源庫實現簡單注入器
- 22. 使用統一屬性注入注入簡單字符串
- 23. 如何使用簡單的地圖功能打開此代碼?
- 24. 打開視圖
- 25. 使用WPF打印視覺
- 26. 使用服務的控制器上的角度單元測試 - 打開注入
- 27. 簡單注入器:注入基類中的一個屬性
- 28. WPF菜單打開方向
- 29. 在簡單注入器中手動註冊web api控制器
- 30. 使用簡單注入器注入MVC控制器構造函數時,未註冊參數