MonoTouch / MonoDroid服务层不兼容?

时间:2012-03-08 20:09:44

标签: android ios xamarin.ios xamarin.android servicestack

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

我们的应用需要使用JSON,我们希望使用ServiceStack。 Xamarin有一个ServiceStack分支,我们正在使用它 - https://github.com/xamarin/ServiceStack

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

我们愿意接受其他选择以统一的方式获得JSON吗?

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

为Android特定库提供MonoTouch Mono的原因通常是因为(较小的,类似Silverlight)的配置文件可用(例如,需要依赖于新的FX4.0功能的东西)剪下)。它们通常与定义的SILVERLIGHT(或MONOTOUCHMONODROID)重新编译相同的代码。

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

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

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

我会尝试后面的第一个(配置),然后共享MonoTouch特殊程序集,最后(如果它确实不起作用)寻找其他替代方案。