Динамически скомпилировать кусок кода и добавьте его в текущий класс
-
27-10-2019 - |
Вопрос
Я хочу создать несколько свойств на летании внутри класса -конструктора и добавить их в текущий класс. Шаблон собственности является следующим
public [PropertyType] [PropertyName]
{
get {return Container.Resolve();}
}
Я немного прочитал о Codedom и Reflection.Emit, но не смог выяснить, как их использовать в этом конкретном случае.
Любая подсказка была бы очень оценена. заранее спасибо
РЕДАКТИРОВАТЬ: Я уточняю цель из -за количества вопросов ... Я пытаюсь внедрить базовый класс для локатора модели View. Привязка в XAML достигается путем ссылки на свойство по его пути, поэтому оно должно быть свойством. Типы и названия добавленных свойств известны только во время выполнения, поэтому я использую отражение, чтобы получить их. Короче говоря, мне нужен пример приема куска кода и динамически скомпилирования в данном классе.
Решение
Если вы находитесь под C# 4, вы можете использовать новые динамические функции для этого. Использовать ExpandoObject
или же DynamicObject
Чтобы добавить свойства в ваш объект динамически. Если вы обратитесь к ним в XAML, они будут правильно решены.
В любом случае, невозможно изменить существующий класс. Вы можете создать новый класс, который может наследовать от существующего класса, и добавить к этому свойства. Вы должны быть в состоянии привязать к ним из XAML.
Другие советы
альтернативный подход:
Вы можете внедрить icustomtypedescriptor и предоставить дополнительные свойства
ссылка на сайт: Проблема с привязкой данных сетки
Свяжите свой XAML с чем -то, как XML, и измените XML во время выполнения
Вы можете создать новые CALSS и наследовать его от текущего класса, новый класс может иметь свойства на лету и функциональность базового класса
да, это возможно, посмотрите на этоПомощь, необходимая для добавления новых методов, динамически свойства в существующие классы