Как я могу дополнительно включить внешнюю библиотеку?
У меня есть PCL, который я хочу содержать в куче базовых классов, поэтому мне не нужно делать их заново для каждого проекта. Теперь я думаю о добавлении в Facebook, так как мне придется ссылаться на внешнюю DLL каждый раз, когда я хочу использовать свой PCL в проекте, даже если это проект с несколькими экранами, потому что у меня будут ошибки сборки, если я не буду т.
Для тех, кто говорит, что это не проблема: я планирую добавить еще больше внешних библиотек, которые мне не нужны каждый раз.
Как я могу решить это? Я хочу включить код для использования этой dll в мой PCL, но я не хочу, чтобы меня заставляли включать dll каждый раз, когда я использую PCL.
1 ответ
Проблема здесь в том, что вы, вероятно, хотите использовать типы из внешней библиотеки в своем коде, и вы не можете сделать это без ссылки на библиотеку.
Обойти эту проблему можно с помощью рефлексии, но ваш код станет намного сложнее, а вы бы этого не хотели.
Другое решение состоит в том, чтобы:
- Создайте интерфейс для каждой внешней зависимости в вашем "общем PCL" (т.е.
ISocialMediaPlatform
для фейсбука). - Создайте новый PCL для каждой внешней зависимости, который ссылается как на ваш "общий PCL", так и на внешнюю библиотеку, и имеет класс, который реализует один из этих интерфейсов (т.е.
FacebookSocialMediaPlatform : ISocialMediaPlatform
)- Эта реализация может затем ссылаться на внешнюю зависимость и напрямую использовать ее типы
- Внедрите реализацию каждого интерфейса в ваш "общий PCL", используя отражение или инфраструктуру внедрения зависимостей.
Это добавляет еще один уровень сложности, но в качестве побочного эффекта это также делает ваш общий код PCL тестируемым.
Наконец, решение, которое я лично предпочел бы, состоит в том, чтобы вообще не иметь огромный "общий PCL", а разделить его на несколько более мелких, выполняющих одну конкретную роль.