具有MvvmCross的非PCL依赖性

时间:2013-05-13 04:21:45

标签: dependencies mvvmcross portable-class-library

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

2 个答案:

答案 0 :(得分:2)

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

  • 如果问题非常严重,您可以放弃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包中使用 - 所以我知道它有效。

答案 1 :(得分:1)

我们的测试员丹尼尔写了一篇关于如何解决这类问题的blog post