Это будет зависеть от вашего источника данных. Если вы извлекаете список МВЗ из базы данных, это будет один из подходов. Если это короткий список предопределенных значений (например, Yes/No/Maybe So), атрибуты свойств могут сделать трюк. Если для каждой среды требуется более настраиваемая конфигурация, то лучшим вариантом будет IoC или шаблон провайдера.
Я думаю, что ваша проблема аналогична специальной странице поиска ad-hoc, которую мы сделали в предыдущем проекте. Мы украсили классы и свойства сущностей с атрибутами, которые содержали некоторые предопределенные «указатели» методам значения lookup и их отношения. Затем мы создали единый пользовательский интерфейс пользовательского интерфейса (например, вашу страницу редактирования, описанную в вашем сообщении), которая использовала эти атрибуты для генерации списков выпадающего списка и автоматического заполнения, динамически генерируя выражение LINQ, а затем выполняла его во время выполнения на основе независимо от того, что делает пользователь.
Это было выполнено в основном тремя движущимися частями: A) атрибутами объектов доступа к данным; B) методами «атрибутного фасада» при компиляции и генерации динамических выражений LINQ среднего уровня и C) пользовательским элементом управления пользовательским интерфейсом, который вызывал наши методы обслуживания среднего уровня.
Иногда такие планы, как эти обратные последствия, но в нашем случае это отлично работало. Украшая наши объекты атрибутами, то создание единого пути логики дало нам достаточно силы, чтобы делать то, что нам нужно было делать, сводя к минимуму количество требуемого кода и полностью устраняя любой шаблон. Однако этот подход не был очень настраиваемым. Компилируя эти атрибуты в код, мы тесно связали наше приложение с источником данных. В этом конкретном проекте это было неважно, потому что это была внутренняя система клиентов, и она соответствовала срокам проекта. Тем не менее, на «реальном продукте», реализующем логику с шаблоном провайдера, или с использованием чего-то вроде проектов Castle IoC, мы бы предоставили нам такую же мощность с гораздо большей конфигурацией. Недостатком этого является то, что есть больше, чтобы справиться, и больше того, что может пойти не так с развертываниями и т. Д.