У меня есть ситуация, когда я хотел бы создавать представления стиля MVC во время выполнения, используя их шаблоны EditorFor/DisplayFor (или что-то подобное).Запись и изменение кода во время выполнения
В идеале наше приложение позволит пользователю выбрать, какие поля они хотят в своем пользовательском интерфейсе (чтобы они могли добавлять/удалять любые по своему усмотрению), с этой целью я считаю, что было бы удобно создавать класс openmodel classess во время выполнения и добавить к ним различные атрибуты dataannotation в зависимости от того, какой пользователь выбирает (т. е. stringlength, required и т. д.).
Одна вещь, которую я должен иметь возможность поддерживать, - это смена созданных классов во время выполнения, не затрагивая других пользователей или необходимость выполнять полный iisreset.
Чтобы сделать это, я провел небольшое исследование, и, похоже, могут быть три разных подхода: CodeDom, RunSharp/Relfection.Emit, Roslyn.
Из того, что я могу сказать reflection.Emit/Runsharp позволит мне создавать классы и добавлять аттрибуты и свойства к ним во время выполнения и, возможно, также модифицировать их, когда мне нужно без неблагоприятных эффектов.
Я не уверен, что Roslyn разрешил бы это, я не смог отследить любые простые примеры создания класса со свойствами или атрибутами в нем, и я видел несколько упоминаний о выходе Roslyn поэтому я не уверен, что это позволяет мне изменить его позже, без неблагоприятных последствий.
В общем, из того, что я видел, большинство людей не рекомендуют CodeDom, поэтому я не совсем уверен, не должен ли я беспокоиться о том, чтобы спуститься по этому маршруту.
Может ли кто-нибудь дать мне представление о том, какое из этих направлений может быть жизнеспособным для меня?
Вы действительно хотите создать тип во время выполнения? Не будет ли что-то вроде 'Dictionary' достаточно? –
svick