Как я могу дополнительно включить внешнюю библиотеку?

У меня есть PCL, который я хочу содержать в куче базовых классов, поэтому мне не нужно делать их заново для каждого проекта. Теперь я думаю о добавлении в Facebook, так как мне придется ссылаться на внешнюю DLL каждый раз, когда я хочу использовать свой PCL в проекте, даже если это проект с несколькими экранами, потому что у меня будут ошибки сборки, если я не буду т.

Для тех, кто говорит, что это не проблема: я планирую добавить еще больше внешних библиотек, которые мне не нужны каждый раз.

Как я могу решить это? Я хочу включить код для использования этой dll в мой PCL, но я не хочу, чтобы меня заставляли включать dll каждый раз, когда я использую PCL.

1 ответ

Решение

Проблема здесь в том, что вы, вероятно, хотите использовать типы из внешней библиотеки в своем коде, и вы не можете сделать это без ссылки на библиотеку.

Обойти эту проблему можно с помощью рефлексии, но ваш код станет намного сложнее, а вы бы этого не хотели.

Другое решение состоит в том, чтобы:

  • Создайте интерфейс для каждой внешней зависимости в вашем "общем PCL" (т.е. ISocialMediaPlatform для фейсбука).
  • Создайте новый PCL для каждой внешней зависимости, который ссылается как на ваш "общий PCL", так и на внешнюю библиотеку, и имеет класс, который реализует один из этих интерфейсов (т.е. FacebookSocialMediaPlatform : ISocialMediaPlatform)
    • Эта реализация может затем ссылаться на внешнюю зависимость и напрямую использовать ее типы
  • Внедрите реализацию каждого интерфейса в ваш "общий PCL", используя отражение или инфраструктуру внедрения зависимостей.

Это добавляет еще один уровень сложности, но в качестве побочного эффекта это также делает ваш общий код PCL тестируемым.

Наконец, решение, которое я лично предпочел бы, состоит в том, чтобы вообще не иметь огромный "общий PCL", а разделить его на несколько более мелких, выполняющих одну конкретную роль.

Другие вопросы по тегам