2012-03-08 63 views
4

我們已經開始構建Cross platform Android/iOS apps,之前專門用於MonoTouch。我們正在評估MonoDroidMonoTouch/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嗎?

回答

4

大體上說,爲MonoTouch編譯的託管* .dll不受MonoTouch特定類型的依賴,與Mono for Android項目兼容。

ServiceStack就是一個很好的例子。我已經親自將它用於Xamarin移動框架產品中的多個項目。

作爲一般規則,我傾向於使用異步方法使用部分類將所有調用封裝到我的Web服務中,如FooProjectRestClient。然後,如果有任何需要發生的分割,它可以發生在使用#if defs的共享類中。

3

爲什麼有MonoTouch的單爲Android專用庫往往是因爲(較小,Silverlight的等)可獲得的個人信息(例如被切出的事情,取決於新FX4.0功能需要)的原因。它們通常與SILVERLIGHT(或MONOTOUCH,MONODROID)重新編譯的代碼相同。

原因MonoTouch 只有特定的館藏通常是因爲其環境(iOS設備)不允許JIT'ing。因此,沒有代碼生成(例如System.Reflection.Emit)或動態(向下)加載代碼...但是,通常可以提供(性能較低的)解決方法或跳過一些功能,並保留MonoTouch庫的特殊版本。現在回到共享組件/項目。所述特殊 MonoTouch的組件(通常是相同的代碼重新編譯定義MONOTOUCH)仍然是一個有效 .NET組件和經常可以在單聲道供Android,單聲道或.NET(一次重新編譯,即使MONOTOUCH )。它絕對不是最優的,但它是你可以嘗試的東西。 (例如:MonoTouchApp,M4AndroidApp),並使用特殊配置(就像有一個iPhone |調試一樣)來設置不同的定義(例如iPhone上的MONOTOUCH * | MONOTOUCH)。 *)。這可以讓您在每個平臺上保持最佳的功能實施(例如,在相同功能以不同方式實施的情況下)。

我會嘗試以後的第一個(配置),然後共享MonoTouch特殊程序集,最後(如果它真的不起作用)尋找其他的選擇。