Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UWP MVVM Template10:跨应用程序访问外部API的单个实例_C#_Mvvm_Uwp_Template10_Uwp Navigation - Fatal编程技术网

C# UWP MVVM Template10:跨应用程序访问外部API的单个实例

C# UWP MVVM Template10:跨应用程序访问外部API的单个实例,c#,mvvm,uwp,template10,uwp-navigation,C#,Mvvm,Uwp,Template10,Uwp Navigation,我的任务是通过模板10使用MVVM接管一个部分开发的大型复杂UWP应用程序。该应用程序需要使用内部开发的WebServicesAPI,这几乎需要用于每个功能,从初始登录页面开始 既然我需要在任何地方访问一个API实例,我该如何正确地进行访问呢?我曾经使用过MVVM,但从未使用过Template10,也从未在整个MVVM UWP应用程序中共享过对象的实例 到目前为止,我可以想到三种方法: 在Appl.xaml.cs中声明并实例化API实例,并全局使用 创建公共Globals类并将实例作为公共静态属

我的任务是通过模板10使用MVVM接管一个部分开发的大型复杂UWP应用程序。该应用程序需要使用内部开发的WebServicesAPI,这几乎需要用于每个功能,从初始登录页面开始

既然我需要在任何地方访问一个API实例,我该如何正确地进行访问呢?我曾经使用过MVVM,但从未使用过Template10,也从未在整个MVVM UWP应用程序中共享过对象的实例

到目前为止,我可以想到三种方法:

  • 在Appl.xaml.cs中声明并实例化API实例,并全局使用
  • 创建公共Globals类并将实例作为公共静态属性:
    c#
    公共类全局
    {
    私有静态OurAPI_OurAPI;
    公共静态API
    {
    获取{return\u ourAPI;}
    设置{u ourAPI=value;}
    }
    }
    

  • 在登录页面中实例化API,然后将其作为参数在ViewModels之间传递,可能使用导航服务

  • 我认为1或2最有可能不符合MVVM,并可能导致单元测试问题,所以3可能是最好的选择?或者有没有其他更正确的方法来遵循Template10/MVVM的概念并能够对其进行单元测试


    编辑:很抱歉代码没有格式化,编辑框的格式可以,但当我保存它时,它会返回到一个长句:-(

    最好的解决方案包括服务和/。这是一个相当复杂的主题,因此我绝对鼓励从多个来源阅读它

    总之,首先为服务创建一个接口,在其中声明所有公共成员和方法。然后创建接口的实现。然后使用IoC容器并将服务注册为单实例(单实例)然后集成IoC,以便它创建视图模型的实例。然后,您可以将接口作为视图模型的构造函数参数,IoC容器将确保提供您注册的单例实例

    在您的情况下,您使用的模板10可以与不同的IoC容器集成,如图所示。请以IoC容器为例进行检查。您可以在文档中看到一些注册和解析服务的示例

    对于一般的解决方案,请查看这篇演示在UWP中使用AutoFac的文章

    您还可以在中看到一些代码示例,特别是模板10的代码示例


    此解决方案优于使用
    静态
    和全局实例,因为您从未实际处理任何硬编码引用,而且实际上总是针对接口工作。您将接口作为构造函数的参数,IoC将负责为您提供实例。此外,您可以随时交换不同类的接口实现,您只需在一个位置(IoC注册)对其进行更新。

    非常感谢Martin的支持,看起来我有一些阅读和实验要做!