我如何选择包含外部库?

How can I optionally include an external library?

我有一个 PCL,我想包含一堆基础 类,所以我不必为每个项目都重新制作它们。现在我正在考虑添加 Facebook,因为每次我想在项目中使用我的 PCL 时我都必须引用外部 dll,即使它是一个只有几个屏幕的项目,因为我会出现构建错误如果我不这样做。

对于那些说这不是问题的人:我计划添加更多我不需要每次都需要的外部 dll。

我该如何解决这个问题?我想在我的 PCL 中包含使用此 dll 的代码,但我不想每次使用 PCL.

时都被迫包含该 dll

这里的问题是您可能想在代码中使用来自外部库的类型,而您不能在不引用库的情况下这样做。

解决此问题的一种方法是使用反射,但您的代码会变得更加复杂,您不希望这样。

另一个解决方案是:

  • 为您 "common PCL" 中的每个外部依赖项创建一个接口(即,ISocialMediaPlatform 用于 facebook)。
  • 为每个外部依赖项创建一个新的 PCL,它引用您的 "common PCL" 和外部库,并有一个 class 实现这些接口之一(即。FacebookSocialMediaPlatform : ISocialMediaPlatform)
    • 此实现随后可以引用外部依赖项并直接使用其类型
  • 使用反射或依赖注入框架
  • 将每个接口的实现注入到您的 "common PCL"

这确实增加了另一层复杂性,但作为副作用,它也使您的通用 PCL 代码可测试。

最后,我个人更喜欢的解决方案是根本没有巨大的 "common PCL",而是将其分成几个较小的部分来完成一个特定的角色。