4

我们已经开始构建Cross platform Android/iOS apps,之前只在 MonoTouch 中构建过。我们正在评估MonoDroid

我们的应用程序需要消费JSON并且我们想使用ServiceStack. Xamarin 有一个我们正在使用的 ServiceStack 分支 - https://github.com/xamarin/ServiceStack

我们希望有一个公共项目负责获取和发布 JSON。Xamarin 的 ServiceStack 具有different DLLs for Android and iOS. 我们如何拥有single project并使用 ServiceStack 来获取我们的 JSON?

我们是否愿意接受以统一方式获取 JSON 的其他选项?

4

2 回答 2

4

总的来说,为 MonoTouch 编译的托管 *.dll 不依赖于 MonoTouch 特定类型,它们与 Mono for Android 项目兼容。

ServiceStack 就是一个很好的例子。我个人将它用于 Xamarin 移动框架产品的多个项目。

作为一般规则,我倾向于使用带有异步方法的部分类来封装对我的 Web 服务的所有调用,例如FooProjectRestClient. 然后,如果需要进行任何类型的分段,它可以使用#if defs 在共享类中发生。

于 2012-03-08T20:39:56.443 回答
3

有 MonoTouchMono 用于 Android 特定库的原因通常是因为可用的(较小的,类似 Silverlight 的)配置文件(例如,需要删除依赖于新 FX4.0 功能的东西)。SILVERLIGHT它们通常是用(或MONOTOUCH, MONODROID)定义的重新编译的相同代码。

MonoTouch只有特定库的原因通常是因为它的环境(iOS 设备)不允许 JIT'ing。所以没有代码生成(例如System.Reflection.Emit)或动态(下载)加载代码......但是通常可以提供(性能较差的)变通方法或跳过一些功能并为 MonoTouch 保留特殊版本的库。

现在回到拥有一个共享程序集/项目。特殊的MonoTouch 程序集(通常与定义相同的代码重新编译MONOTOUCH)仍然是有效的.NET 程序集,并且通常可以在 Mono for Android、Mono 或 .NET 中使用(一旦重新编译,即使使用 .NET MONOTOUCH)。这绝对不是最佳选择,但您可以尝试。

另一种是拥有相同的项目(例如 MyLib),跨越多个解决方案(例如 MonoTouchApp、M4AndroidApp)并使用特殊配置(就像有一个 iPhone|Debug 一样)来设置不同的定义(例如MONOTOUCH在 iPhone*|* 上)。这可以让您在每个平台上保持最佳的功能实现(例如,如果相同的功能以不同的方式实现)。

我会先尝试后者(配置),然后共享 MonoTouch 特殊组件,最后(如果它真的不起作用)寻找其他替代方案。

于 2012-03-08T23:34:57.083 回答