MonoTouch / MonoDroid Service Layer incompatibilidades?

Hemos comenzado a build aplicaciones Cross platform Android/iOS apps , habiendo creado exclusivamente MonoTouch anteriormente. Estamos evaluando MonoDroid .

Nuestras aplicaciones necesitan consumir JSON y nos gustaría utilizar ServiceStack . Xamarin tiene una sucursal de ServiceStack que estamos usando – https://github.com/xamarin/ServiceStack

Nos gustaría tener un proyecto común responsable de GET y POSTing JSON. ServiceStack de Xamarin tiene different DLLs for Android and iOS . ¿Cómo tenemos un single project y usamos ServiceStack para get en nuestro JSON?

¿Estamos abiertos a otras opciones para get JSON de forma unificada?

En general, managed * .dll comstackdos para MonoTouch que no tienen una dependencia de los types específicos de MonoTouch son compatibles con los proyectos Mono para Android.

ServiceStack es un gran ejemplo de esto. Lo he usado personalmente para múltiples proyectos en las ofertas de frameworks mobilees de Xamarin.

Como regla general, tiendo a encapsular todas las invocaciones a mis web services utilizando una class parcial con methods asíncronos, como FooProjectRestClient . Y luego, si alguna vez hay algún tipo de segmentación que deba ocurrir, puede suceder en una class compartida usando #if defs.

La razón por la que existen bibliotecas específicas de MonoTouch y Mono para Android es a menudo debido al perfil (más pequeño, parecido a Silverlight) disponible (p. Ej., Las cosas que dependen de las nuevas funciones de FX4.0 deben cortarse). A menudo son el mismo código recomstackdo con SILVERLIGHT (o MONOTOUCH , MONODROID ) definido.

La razón por la que MonoTouch solo libera bibliotecas específicas generalmente es porque su entorno (dispositivos iOS) no permite JIT. Por lo tanto, no hay generación de código (por ejemplo, System.Reflection.Emit ) o el código de carga dinámica (abajo) … Sin embargo, a menudo es posible proporcionar soluciones (less performativas) o omitir algunas características y mantener una versión especial de la biblioteca para MonoTouch.

Ahora vuelve a tener un único ensamblaje / proyecto compartido. El ensamblaje especial de MonoTouch (generalmente el mismo código recomstackdo con MONOTOUCH definido) sigue siendo un ensamblado válido de .NET y, a menudo, puede usarse en Mono para Android, Mono o .NET (una vez recomstackdo, incluso con MONOTOUCH ). Definitivamente no es óptimo, pero es algo que puedes probar.

Otro tiene los mismos proyectos (p. Ej., MyLib), en varias soluciones (p. Ej., MonoTouchApp, M4AndroidApp) y utiliza configuraciones especiales (al igual que hay un iPhone | Depurar uno) para definir diferentes definiciones (por ejemplo, MONOTOUCH en iPhone * | *). Eso puede permitirle mantener la mejor implementación de características en cada plataforma (por ejemplo, en caso de que la misma característica se aplique de manera diferente).

Probé primero (configuration) más tarde, luego compartí el ensamblaje especial de MonoTouch y finalmente (si realmente no funciona) busqué otras alternativas.