【发布时间】:2013-05-13 04:21:44
【问题描述】:
我们的应用程序有几个不作为 PCL 库提供的依赖项(例如 RestSharp、Websocket4Net、Reactive Extensions),但可用于我们计划定位的每个平台。在 MvvmCross 中处理这种情况的最佳方法是什么?什么是最简单的?
【问题讨论】:
标签: dependencies mvvmcross portable-class-library
我们的应用程序有几个不作为 PCL 库提供的依赖项(例如 RestSharp、Websocket4Net、Reactive Extensions),但可用于我们计划定位的每个平台。在 MvvmCross 中处理这种情况的最佳方法是什么?什么是最简单的?
【问题讨论】:
标签: dependencies mvvmcross portable-class-library
有多种方法可以解决这个问题。
如果问题真的很大,你可以放弃PCL的方法,使用多平台特定的类库。这些库可以引用 MvvmCross PCL 和 RestSharp 的特定平台版本等。有关此方面的优缺点的讨论,请参阅 - What is the advantage of using portable class libraries instead of using "Add as Link"?
一般来说,我现在只在必须包含一个非常大的 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 包中使用了这种技术 - 所以我知道它有效。
【讨论】:
我们的测试员 Daniel 写了一封 blog post 来说明如何解决这类问题。
【讨论】: