我们已经开始构建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吗?
答案 0 :(得分:4)
总体而言,为MonoTouch编译的托管* .dll不依赖于MonoTouch特定类型,与Mono for Android项目兼容。
ServiceStack就是一个很好的例子。我个人将它用于Xamarin移动框架产品的多个项目。
作为一般规则,我倾向于使用带有异步方法的部分类(例如FooProjectRestClient
)将所有调用封装到我的Web服务中。然后,如果有任何需要发生的细分,可以使用#if defs在共享类中进行。
答案 1 :(得分:3)
为Android特定库提供MonoTouch 和 Mono的原因通常是因为(较小的,类似Silverlight)的配置文件可用(例如,需要依赖于新的FX4.0功能的东西)剪下)。它们通常与定义的SILVERLIGHT
(或MONOTOUCH
,MONODROID
)重新编译相同的代码。
MonoTouch 仅特定库的原因通常是因为其环境(iOS设备)不允许JIT。因此,没有代码生成(例如System.Reflection.Emit
)或动态(向下)加载代码......但是,通常可以提供(性能较低)的变通方法或跳过一些功能并保持特殊 MonoTouch库的版本。
现在回到单个共享程序集/项目。 特殊 MonoTouch程序集(通常与定义的MONOTOUCH
重新编译的代码相同)仍然是有效 .NET程序集,经常可以在Mono for Android,Mono或.NET中使用(一旦重新编译,即使使用MONOTOUCH
)。它绝对不是最佳的,但你可以试试。
另一个是拥有相同的项目(例如MyLib),跨多个解决方案(例如MonoTouchApp,M4AndroidApp)并使用特殊配置(就像有一个iPhone | Debug一个)来设置不同的定义(例如MONOTOUCH
iPhone * | *)。这可以让您在每个平台中保持最佳功能实现(例如,如果以不同方式实现相同功能)。
我会尝试后面的第一个(配置),然后共享MonoTouch特殊程序集,最后(如果它确实不起作用)寻找其他替代方案。