Dependencies 带MvvmCross的非PCL依赖项

Dependencies 带MvvmCross的非PCL依赖项,dependencies,mvvmcross,portable-class-library,Dependencies,Mvvmcross,Portable Class Library,我们的应用程序有几个不能作为PCL库使用的依赖项(例如RestSharp、Websocket4Net、反应式扩展),但可用于我们计划针对的每个平台。在MvvmCross中处理此场景的最佳方法是什么?最简单的是什么?我们的测试人员Daniel写了一篇关于如何解决这类问题的文章。有多种方法可以解决这类问题 如果问题真的很大,您可以放弃PCL方法,使用多个特定于平台的类库。这些库可以参考MvvmCross PCL和特定于平台的RestSharp版本等。有关此版本的正反两方面的讨论,请参见- 一般来说

我们的应用程序有几个不能作为PCL库使用的依赖项(例如RestSharp、Websocket4Net、反应式扩展),但可用于我们计划针对的每个平台。在MvvmCross中处理此场景的最佳方法是什么?最简单的是什么?

我们的测试人员Daniel写了一篇关于如何解决这类问题的文章。

有多种方法可以解决这类问题

  • 如果问题真的很大,您可以放弃PCL方法,使用多个特定于平台的类库。这些库可以参考MvvmCross PCL和特定于平台的RestSharp版本等。有关此版本的正反两方面的讨论,请参见-

    一般来说,如果我必须包含一个非常大的遗留库(例如,一个客户拥有一个与3个单独的WCF服务对话的大型业务逻辑库),我现在只采用这种文件链接方法

  • 您提到的一些库可能已经有了PCL端口和/或替代品-例如

    • 被动扩展具有官方PCL端口-请参阅
    • 对于简单的rest调用,我们现在已经开始在网络插件中包含一些功能-请参阅(警告-alpha代码!)
    许多开源作者现在都在提供PCL版本,所以请检查

  • 您通常可以将本机库抽象到接口后面,然后在运行时注入该库的正确版本。这就是MvvmCross中插件的功能

    你可以看到有多少插件是内置的

    这个示例中有一个非常简单的插件-

  • 您可以使用的另一种方法是提供“引用程序集”-这些是仅包含类型和接口签名的PCL程序集(即,它们仅提供
    NotImplementedException
    实现)。PCL项目链接到这些程序集,而UI项目链接到真实的程序集。在构建时,您的PCL核心将根据签名进行构建,但MSBuild/XBuild将确保实际拉入正确的本机库

    我没有在实践中使用最后一种技术。我更喜欢接口路径,因为它可以带来更好的体系结构。然而,这种技术在当前的MvvmCross Nuget包中使用——所以我知道它是有效的