После этого на ваш комментарий:
Я экспериментировал, и это показывает, что пока я определяю таких же классов, а имена DLL остаются то же самое, физически меняя DLL в каталоге работает отлично. У вас есть какие-либо проблемы с или проблемы с ?
Основная проблема/падение этого подхода - обеспечение того, чтобы классы/методы отображались обеими библиотеками в режиме блокировки. Возможно, лучший способ сделать это, учитывая, что вы, кажется, модель:
PROGRAM -> REFERENCED DLL -> [One of two "Backend DLL's]
Было бы создать абстрактные классы/интерфейсы в «Реферировано DLL», которые определяют классы/методы, что и в «Backend DLL "должна быть показана, а затем ссылаться на справочную библиотеку DLL« REFERENCED DLL »и реализовывать фактические классы поверх абстрактных классов/интерфейсов.
Например, программа «Program» ожидает использования класса «Logger» в REFERENCED.DLL, который использует методы в класах под названием «BackEndLogger» в BACKEND.DLL (будь то разработка или версия для производства). Итак, в ССЫЛКАХ.DLL есть класс, такие как:
public abstract class BackEndLogger
{
public virtual void LogEvent(string eventToLog)
}
Затем в обеих версиях «BACKEND.DLL», есть класс, таких как:
public class Logger : BackEndLogger
{
public override void LogEvent(string eventToLog)
{
... code for implementation goes here
}
}
REFERENCED.DLL будет иметь ссылку на DLL под названием «BACKEND.DLL», и потому, что интерфейсы классов точно такие же (в значительной степени обеспеченные, если синхронизировать их, реализуя абстрактные классы/интерфейсы в REFERENCED.DLL), не будут более мудрыми.
Надеемся, что это сделал какой-то смысл =)
Можете ли вы расширить на то, что вы имеете в виду под «развития ориентированных функций», это просто дополнительная вырубка лесов, или вы меняете поведение в какой-то существенным образом? – ScottS
Это больше, чем просто регистрация. Мы занимаемся протоколированием с использованием реализаций трассировки/отладки. Я думаю, лучший ответ заключается в том, что мы существенно меняем поведение. – Sako73