0

我有一套庫,目標Silverlight & Windows Phone 7.5,在我的圖書館我有一個導航解決方案,有一個共同的界面,但不同的實現 - 取決於平臺。 (SL & WP7導航非常相似,但有很細微的差別,不幸的是它們無法避免).NET 4.5可移植類庫:是否可以在運行時確定平臺?

如果我要編寫一個可移植的類庫,它將包含我的INavigationModel接口+兩個實現,有沒有什麼辦法告訴哪個平臺調用可移植類庫?這些信息將幫助我在運行時選擇正確的解決方案。

乾杯

編輯 任何替代的解決方案是值得歡迎的過,我仍然試圖拼湊關於便攜式類庫的任何信息,看看他們能夠

回答

3

實際上,這可能不太好。即使您可以可靠地確定您正在運行的環境(也許是對Environment.OperatingSystem的某種攻擊),但如果您的實現具有任何複雜性,則不太可能完全遵循定義類型/規則的最小公分母,方法等。

可移植程序集的全部要點是定義真正共享的位(實用程序方法,接口等) - 可能更好的解決方案可能是在便攜式程序集中定義具有共享功能的基類/接口,然後擴展到特定於平臺的程序集以實現不可移植的位。

+0

我擔心它可能會出現這種情況,還是讓我們來看看是否有其他選項可供探索 – Maciek

+0

最近的一篇文章可能也有幫助:http://blogs.msdn.com/b/dsplaisted/archive/2012/08 /27/how-to-make-portable-class-libraries-work-for-you.aspx – nitzmahone

1

沒有一個好方法可以做你想做的事情。便攜式圖書館並不需要具備特定於平臺的項目,它只是幫助促進特定於平臺的項目以平臺不可知的方式進行交流。

我傾向於建議INavigationService的具體實現本身存在於特定於平臺的項目中,而常見的抽象存在於可移植項目中。然後使用IoC容器或類似ServiceLocator的框架來連接它們(我推薦Autofac)。我在爲MSDN寫的一篇文章(實際上是我做了這個導航服務)中做了類似的操作:Create a Continuous Client Using Portable Class Libraries。請務必下載源代碼以查看具體示例。

+0

這就好像我已經開始使用它了;當我創建PCL的一個實例時,我傳遞了包含平臺特定實現所需接口的實例。當然,現在我必須明白你的意思了,因爲聽起來好像我可以避免實例傳遞;) –

相關問題