Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Создание контролов c помощью XML


Автор: elsan 22.7.2011, 05:18
Добрый день. 
Есть файл  xml с конфигурацией пользовательских компонентов. У всех компонентов есть общий родитеский класс, наследованный от Control.  Возможны 2 способа создание компонентов 
1. рефлексия, но она работает медленно, а компонентов около 600. 
2. руками жестко привязать свойства компонентов
Код

// сначала задаем тип
switch (reader.Name) {
                            case "AnalogSensor":
                                widget = new AnalogSensor();
                                break;
                            case "Valve":
                                widget = new Valve();
                                break;
....

// потом присваемаем свойства
 switch (reader.Name) {
                            case "Title":
                                widget.Title = reader.ReadString();
                                break;
                            case "Height":
                                heightWidget = Convert.ToInt32(reader.ReadString());
                                break;
                            case "Width":
                                widthWidget = Convert.ToInt32(reader.ReadString());
                                break;
 ...


Вопрос скорее к проектированию, как еще возможно создавать объекты из файла конфигурации? Можно ссылку, или по какой теме смотреть и искать информацию.


Автор: elsan 22.7.2011, 06:33
Хотя лучший способ для такой ситуации наверно все-таки рефлексия.

Автор: jonie 22.7.2011, 11:27
есть еще способ скомпилировать динамически сборку, где будет ваш по сути хардкодный switch записан - это думаю один из быстрых вариантов будет. А скомпилированную сборку кешировать соотвественно (например запоминать md5 xml файла внутри и по нему ориентироваться надо или нет персоздавать сборку).

Читайте про Reflection.Emit (сложнее) и CodeDOM (проще, но медленее компилировать).

Сразу интересности: http://bltoolkit.net/Source/Reflection/Emit/EmitHelper.cs.htm
А этот плагин вам поможет ничего не зная сделать всё что надо: http://reflectoraddins.codeplex.com/wikipage?title=ReflectionEmitLanguage

Автор: elsan 22.7.2011, 11:59
Спасибо за совет и ссылки. smile буду пробовать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)