[英]How is Navigation from ContentDialog to a different page in UWP which uses Template10 MVVM possible?
[英]UWP MVVM Template10: Access single instance of external API across application
我的任務是通過模板10使用MVVM接管部分開發的大型和復雜的UWP應用程序。該應用程序需要使用內部開發的Web服務API,這需要用於幾乎所有單個功能,從初始開始登錄頁面。
因此,我需要在任何地方訪問API的單個實例,我該如何正確地執行此操作? 我已經使用了MVVM但從未使用過Template10,並且之前從未在整個MVVM UWP應用程序中共享對象的實例。
到目前為止,我可以想到三種方式:
創建一個公共Globals類並將該實例作為公共靜態屬性: c# public class Globals { private static OurAPI _ourAPI; public static OurAPI API { get { return _ourAPI; } set { _ourAPI = value; } } }
c# public class Globals { private static OurAPI _ourAPI; public static OurAPI API { get { return _ourAPI; } set { _ourAPI = value; } } }
在登錄頁面中實例化API,然后將其作為ViewModel之間的參數傳遞,可能是使用導航服務。
我認為1或2很可能不符合MVVM並且可能導致單元測試問題所以3可能是最好的選擇嗎? 或者是否有另一種更正確的方法來遵守Template10 / MVVM概念並且能夠對其進行單元測試?
編輯:抱歉代碼沒有格式化,編輯框格式化它確定但是當我保存它它回到一個長句:-(
最佳解決方案包括單件服務和控制反轉(IoC) / 依賴注入 。 這是一個非常復雜的主題,所以我絕對鼓勵從幾個來源閱讀它。
總之,您首先要為您的服務創建一個接口,您可以在其中聲明所有公共成員和方法。 然后,您創建一個接口的實現。 然后使用IoC容器並將服務注冊為單例(單實例),然后集成IoC,以便創建視圖模型的實例。 然后,您可以將接口作為視圖模型的構造函數參數,IoC容器將確保提供您注冊的單例實例。
在您的情況下,您使用的是模板10,它可以與不同的IoC容器集成,如文檔中所示 。 查看AutoFac作為IoC容器的示例。 您可以在文檔中看到一些注冊和解析服務的示例。
對於一般解決方案,請檢查此SO問題 ,該問題演示了如何在UWP中使用AutoFac。
這個解決方案比使用static
和全局實例更好,因為你從來沒有真正處理任何硬編碼的引用,實際上總是只對接口工作。 您將接口作為構造函數的參數,IoC將負責為您提供實例。 此外 - 您可以隨時將接口實現交換為其他類,您只需在一個位置更新它 - IoC注冊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.