3

我们的应用程序有几个不作为 PCL 库提供的依赖项(例如 RestSharp、Websocket4Net、Reactive Extensions),但可用于我们计划针对的每个平台。在 MvvmCross 中处理这种情况的最佳方法是什么?什么是最简单的?

4

2 回答 2

2

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

  • 如果问题真的很大,你可以放弃 PCL 的方法,而使用多平台特定的类库。这些库可以引用 MvvmCross PCL 和 RestSharp 的平台特定版本等。有关此方面的优缺点的讨论,请参阅 -使用可移植类库而不是使用“添加为链接”有什么优势?

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

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

    许多开源作者现在都提供 PCL 版本 - 所以检查一下。

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

    您可以查看https://github.com/slodge/MvvmCross/tree/v3/Plugins/中构建了多少插件

    此示例中有一个非常简单的插件 - https://github.com/slodge/MvvmCross-Tutorials/tree/master/GoodVibrations

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

    我在实践中没有使用过最后一种技术。我更喜欢接口路由,因为它可以带来更好的架构。但是,这种技术用于当前的 MvvmCross Nuget 包中 - 所以我知道它有效。

于 2013-05-14T07:27:56.573 回答
1

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

于 2013-05-14T04:02:14.847 回答