簡體   English   中英

UWP MVVM Template10:跨應用程序訪問外部API的單個實例

[英]UWP MVVM Template10: Access single instance of external API across application

我的任務是通過模板10使用MVVM接管部分開發的大型和復雜的UWP應用程序。該應用程序需要使用內部開發的Web服務API,這需要用於幾乎所有單個功能,從初始開始登錄頁面。

因此,我需要在任何地方訪問API的單個實例,我該如何正確地執行此操作? 我已經使用了MVVM但從未使用過Template10,並且之前從未在整個MVVM UWP應用程序中共享對象的實例。

到目前為止,我可以想到三種方式:

  1. 在Appl.xaml.cs中聲明並實例化API實例並在全局范圍內使用它
  2. 創建一個公共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; } } }

  3. 在登錄頁面中實例化API,然后將其作為ViewModel之間的參數傳遞,可能是使用導航服務。

我認為1或2很可能不符合MVVM並且可能導致單元測試問題所以3可能是最好的選擇嗎? 或者是否有另一種更正確的方法來遵守Template10 / MVVM概念並且能夠對其進行單元測試?

編輯:抱歉代碼沒有格式化,編輯框格式化它確定但是當我保存它它回到一個長句:-(

最佳解決方案包括單件服務和控制反轉(IoC) / 依賴注入 這是一個非常復雜的主題,所以我絕對鼓勵從幾個來源閱讀它。

總之,您首先要為您的服務創建一個接口,您可以在其中聲明所有公共成員和方法。 然后,您創建一個接口的實現。 然后使用IoC容器並將服務注冊為單例(單實例),然后集成IoC,以便創建視圖模型的實例。 然后,您可以將接口作為視圖模型的構造函數參數,IoC容器將確保提供您注冊的單例實例。

在您的情況下,您使用的是模板10,它可以與不同的IoC容器集成,如文檔中所示 查看AutoFac作為IoC容器的示例。 您可以在文檔中看到一些注冊和解析服務的示例。

對於一般解決方案,請檢查此SO問題 ,該問題演示了如何在UWP中使用AutoFac。

您還可以看到在一些代碼示例這太問題這一個專門為模板10。

這個解決方案比使用static和全局實例更好,因為你從來沒有真正處理任何硬編碼的引用,實際上總是只對接口工作。 您將接口作為構造函數的參數,IoC將負責為您提供實例。 此外 - 您可以隨時將接口實現交換為其他類,您只需在一個位置更新它 - IoC注冊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM