【问题标题】:Non-PCL dependencies w/ MvvmCross具有 MvvmCross 的非 PCL 依赖项
【发布时间】:2013-05-13 04:21:44
【问题描述】:

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

【问题讨论】:

    标签: dependencies mvvmcross portable-class-library


    【解决方案1】:

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

    • 如果问题真的很大,你可以放弃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 包中使用了这种技术 - 所以我知道它有效。

    【讨论】:

      【解决方案2】:

      我们的测试员 Daniel 写了一封 blog post 来说明如何解决这类问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-27
        • 1970-01-01
        • 2012-11-27
        • 1970-01-01
        • 2021-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多