dependencies - 非 PCL 依赖 w/MvvmCross

标签 dependencies mvvmcross portable-class-library

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

最佳答案

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

  • 如果问题真的很大,您可以放弃 PCL 方法,并使用多个平台特定的类库。这些库可以引用 MvvmCross PCL 和平台特定版本的 RestSharp 等。有关其优缺点的讨论,请参见 - What is the advantage of using portable class libraries instead of using "Add as Link"?

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

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

    许多开源作者现在都提供 PCL 版本 - 请查看。

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

    你可以看到https://github.com/slodge/MvvmCross/tree/v3/Plugins/中内置了多少插件

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

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

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

关于dependencies - 非 PCL 依赖 w/MvvmCross,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16514816/

相关文章:

java - 如何列出 JAR 的依赖项

go - Go 插件依赖是如何工作的?

mobile - MvvmCross:另一个 ViewModel 场景中的 ViewModel

android - 在 MvxRecyclerView 中为选定项目设置动画

c# - 我不能将动态与可移植类库一起使用吗?

c# - 在 PCL 中将 String 资源添加到 .resx 会导致编译错误

c++ - CMake:多库包导出中的依赖管理

android - 将 MvxDialogFragment 与 ViewModel 绑定(bind)

wcf - 在 PCL 服务引用设置中禁用基于任务的异步操作

java - 大型 Java 系统依赖管理