2016-03-30 44 views
1

我正在構建一個包含Azure託管的MVC Web Api和iOS應用程序的項目。我試圖使用Xamarin來構建應用程序。據我瞭解,我應該在我的Xamarin項目中使用一個可移植的類庫,以允許我在Web Api項目和Xamarin應用程序之間共享代碼,以及在android等其他平臺上的任何未來應用程序之間共享代碼。Xamarin便攜庫 - 如何共享類

所以,我想把我的模型放在便攜式庫中。該應用程序和Web API將來回傳遞這些模型。但是,便攜式庫沒有Azure表存儲庫。它甚至沒有一些非常基本的東西。我的模型需要引用Azure存儲庫,以便將實例保存到存儲。

使這段代碼可以共享的最佳方式是什麼?顯然我需要複製我的模型類,以便它們可以存在於每個位置。但是,如果PCL中的那些繼承了Web Api項目中的那些呢?反之亦然?是否應該有一個既能從中繼承的接口(實際上,Azure表存儲庫要求這些類已經從ITableEntity繼承...)。只是尋找在Web Api項目和Xamarin項目使用的PCL之間共享這些類的最佳方式。

回答

3

使用PCL - 可移植類庫是一個很好的開始!在分享您的代碼之前,您可能想了解一些怪癖。

  • PCL配置文件是可用的一組有限的API。這意味着某些類/程序集可能不包括在內。您通常可以通過MSDN查找類/程序集,並查看它是否在類名旁邊有一個PCL圖標。
  • 如果您嘗試使用的庫的組件不在當前PCL配置文件中,但可以在本機平臺上找到,您將需要使用IoC/DI模式。

  • 希望您使用的庫支持PCL。否則,您將需要一個支持PCL配置文件的庫。 (您可以通過下載.nupkg,解壓並查看libs文件夾來檢查此問題)。 注意:您可能需要檢查Prerelease NuGet頻道以獲得PCL支持。有時你可以找到一個開源項目,並刪除/替換某些程序集/代碼,使其成爲Portable

一般準則:

  • 讓您POCO類簡單的PCL。如果您需要添加到模型中,請在該平臺上創建一個模型層,以繼承您的簡單PCL模型。 EX:您的Web API有一個特定的[Attribute]標籤或界面,您需要將其應用於您的模型。您可能已經有一個Model,如Person這是PCL中的簡單POCO類,然後您可以創建一個PersonApiEntity模型,該模型可能會繼承Person以及您需要應用的任何特定於平臺的API。

  • 看來ITableEntity/TableEntity在PCL配置文件中不受支持。

https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.itableentity.aspx

快速瀏覽(https://github.com/Azure/azure-storage-net/blob/master/Lib/Common/Table/ITableEntity.cs

+0

謝謝喬恩看到的源泉!這就是我需要知道的。我將把POCO放在PCL中,並在Web API項目中繼承它們。 –

+0

Jon,一個小小的障礙 - 我在Web API項目中的類需要繼承自Microsoft.WindowsAzure.Storage.Table.TableEntity。這意味着他們不能從PCL中的POCO繼承。在這種情況下最好的方法是什麼 - 你會創建一組繼承自POCO的中間類,然後從這些中間類派生你的Web API類嗎?這似乎很混亂,但我沒有任何更好的想法... –

+0

看起來像@MikeWo在這裏的答案http://stackoverflow.com/questions/33912186/using-pocos-when-persisting-to-azure-table在Rory Primrose的鏈接中,存儲有一些很好的選擇,雖然它們可能會超出我目前的技能水平。似乎你可以繼承POCO並實施ITableEntity,並且也可以避開它,儘管這並不理想。 –