2016-11-10 2 views
1

У меня есть ProjectA и ProjectB. ProjectA может работать независимо без какой-либо зависимости ProjectB. Теперь мне нравится включать некоторые модули/функции в ProjectA, только если ProjectB добавлен в качестве ссылки в ProjectA. Как достичь этого?Включение директив условной компиляции на основе ссылок, включенных в проект C#

Я попытался добавить условную компиляцию в необходимые модули/функции в ProjectA, как показано ниже.

#if ProjB 
{ 
.. 
} 
#endif 

Но как я могу включить эти условные константы компиляции, проверяя условие, что «ProjectB» ссылается на «ProjectA». Кроме того, мне не нужно, чтобы «ProjectB» всегда ссылался на «ProjectA». Тем не менее «ProjectA» в отдельных случаях необходимо работать независимо.

ответ

1

Вы можете использовать что-то вроде шаблона плагина. Например:

  1. Projecta грузы и цифры, если у него есть или нет возможности загружать ProjectB
  2. Если ProjectB доступен ProjectA ищет хорошо определенную точку входа (например, вы можете иметь один класс, реализующий IPlugin с Load методом
  3. Если точка входа найдена, ProjectA вызывает ее и сохраняет ссылку (какая-то переменная или добавляет ее в список, если у вас есть несколько опций.
  4. Теперь во всех местах, где вы хотите получить условную компиляцию, вы просто проверяете, этот плагин существует и генерирует исключение, которое необходимо добавить в ProjectB чтобы использовать эту функциональность.

Вы можете определить специальный интерфейс (несколько интерфейсов), о котором будут знать оба проекта. Затем ваш плагин (ProjectB) предоставит этот интерфейс всем методам, которые вы хотите вызвать.

Смежные вопросы