2016-10-21 53 views
0

我有一個PCL,我想包含一堆基類,所以我不必爲每個項目再做一次。現在我正在考慮在Facebook中添加內容,因爲每次我想在項目中使用我的PCL時,都必須引用外部dll,即使它只是一個只有幾個屏幕的項目,因爲如果我不'噸。如何可以選擇包含外部庫?

對於那些說這不是問題:我打算增加更多的外部DLL,我不需要每次。

我該如何解決這個問題?我想包含在我的PCL中使用此DLL的代碼,但我不希望每次使用PCL時都被迫包含該DLL。

回答

1

這裏的問題是,您可能想要在代碼中使用外部庫中的類型,並且您不能引用該庫,而無法使用。

解決這個問題的方法是使用反射,但是你的代碼會變得更加複雜,並且你希望你沒有。

另一個解決方案是:

  • 在 「共同PCL」(即ISocialMediaPlatform爲Facebook)創建爲每個外部依賴性的接口。
  • 每個外部依賴創建一個新的PCL,這同時引用您的「共同PCL」和外部庫,並有實現這些接口之一(即FacebookSocialMediaPlatform : ISocialMediaPlatform)一類
    • 此實現可然後引用外部的依賴和使用它的類型直接
  • 注入每一接口的實現到您的「共同PCL」使用反射或依賴注入框架

這確實會增加另一層複雜性,但作爲副作用,它也會使您的常見PCL代碼可測試。最後,我個人更喜歡的解決方案是根本沒有一個巨大的「普通PCL」,而是把它分成幾個小的,滿足一個特定角色的解決方案。

+0

那麼我的問題是,我有大約20個圖書館,我想選擇包括,以及更多未來。這些庫只需要在從平臺調用的「設置」方法中引用一次,通常是在「應用程序」類中使用抽象或虛擬的應用程序或API密鑰。所以我沒有看到如何爲這些平臺的每個平臺創建新的PCL,並將它們與正確的API密鑰配對。我也在考慮鏈接,如果我需要它們,我會添加註釋(如果它甚至以這種方式工作),您是否可以添加使用鏈接器的解決方案? – vrwim

+0

我只能建議你保持小而簡單的東西,我不想付出努力幫助你創建我認爲不可維護的怪物庫。這只是我的看法,沒有任何意圖。 –