C# : "расширить" тип перечисления во время выполнения
Итак, у меня есть это довольно большое приложение, которое использует перечисление TagType. Использование TagType широко распространено в кодовой базе. Я модифицирую код, чтобы позволить пользователям добавлять теги, другими словами, "расширять" перечисление, так сказать, во время выполнения
Приложение представляет собой интерфейс базы данных. Мы не можем изменить кодовую базу. Мы не можем внести существенные изменения, чтобы сделать кодовую базу "непроверенной". Поэтому мы не можем реализовать то, что можно было бы считать "лучшей практикой". Нам просто нужен способ "расширить" тип-во время выполнения - так, чтобы кодовая база продолжала функционировать "как была", но с возможностью добавить небольшой фрагмент кода, который будет реализовывать-любыми возможными средствами - это изменение
текущее определение TagType таково
public enum TagType { __RESERVED__ = 0, __Raised__ = 1, __Closed__ = 2 }
но нам нужен какой-то способ "расширения" этих значений во время выполнения , чтобы функциональность кодовой базы оставалась работоспособной, то есть там, где код может, например, тестироваться:
if (localTag == __Raised__) db.Search(localTag)
и так далее...
ваше решение не обязательно должно быть перечислением, TagType находится в своем собственном файле, и мы можем изменить реализацию TagType на что угодно при условии, что остальная часть кодовой базы компилируется и запускается.
Кстати, код должен быть переносимым и не делать предположений о O/S - так что решения, основанные на отражении, могут оказаться невозможными.
Что я уже пробовал:
Я просматриваю страницы google, чтобы найти множество решений для отдельных ситуаций, но, прочитав их, ни один из них, которые я прочитал, не соответствует этому требованию. Поэтому, пожалуйста, если вы намерены направить меня в google, то, пожалуйста, я могу очень вежливо попросить вас пойти помочь какому-нибудь другому члену codeproject, а не писать здесь.
Кроме того, это выглядело как хорошее решение, однако оно зависит от сборок, и я не хотел навязывать код конкретной ОС.
ТПС://сайте StackOverflow.ком/вопросы/857414/динамически создать-Ан-перечисление
F-ES Sitecore
Если код не знает о ваших расширенных значениях перечисления, когда он был скомпилирован, то он ничего не может с ними сделать, так что это требование немного бессмысленно.
Рефакторинг кода, чтобы использовать что-то другое, кроме перечисления, использовать коллекцию значений имени, словарь или что-то еще, что соответствует этому требованию. Сказать, что вы не можете изменить кодовую базу, все равно что сказать, что вы хотите сделать омлет, не разбив яиц.
ninjaef
Неверное предположение
Кодовая база ориентирована на Плагины, хотя плагины могут быть довольно большими с точки зрения SLoC. Это плагин, за который мы несем ответственность. Таким образом," интерпретация "" перечислений " выполняется в плагине, но распространяется через обратные вызовы. Я не хочу вдаваться в дизайн , поэтому я намеренно попросил помощи на очень конкретном примере, и именно поэтому я также не хотел вступать в дискуссию об архитектуре и модели дизайна, которую мы здесь почти не контролируем.