繁体   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