Конфигурирование .NET-приложений
От: Андрей Корявченко Россия http://blogs.rsdn.org/avk
Дата: 14.06.03 18:50
Оценка: 1209 (41) +1 -1
Статья :
Конфигурирование .NET-приложений
Автор(ы): Андрей Корявченко
Дата: 12.05.2003
Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru.


Авторы :
Андрей Корявченко

Аннотация :
Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....
AVK Blog
Re: Конфигурирование .NET-приложений
От: Mikhail_T  
Дата: 14.06.03 19:00
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

АК>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....



А почему не использовались уже сушествующие механизмы конфигурации ?
Re[2]: Конфигурирование .NET-приложений
От: Mika Soukhov Stock#
Дата: 14.06.03 19:11
Оценка:
Здравствуйте, Mikhail_T, Вы писали:

M_T>Здравствуйте, Андрей Корявченко, Вы писали:


АК>>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....



M_T>А почему не использовались уже сушествующие механизмы конфигурации ?


Советую прочитать статью.
Re: Конфигурирование .NET-приложений
От: VBez  
Дата: 01.10.03 12:44
Оценка: :)
Здравствуйте, Андрей Корявченко, Вы писали:
АК>Конфигурирование .NET-приложений
АК>Аннотация :
АК>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....

Классная статья.
Но есть несколько мелких шероховатостей
Почему бы вместо Singleton не использовать Double-Checked Locking
и не сделать все методы в классе Config статическими.
Ну и в
public static Config GetClone()
{
  return (Config)instance.MemberwiseClone();
}

заменить instance на Instance?
Побольше таких статей.
Re[2]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.10.03 18:59
Оценка:
Здравствуйте, VBez, Вы писали:

VB>Почему бы вместо Singleton не использовать Double-Checked Locking


Ну как бы задача работы в многопоточном режиме не рассматривалась, поэтому не было никакого желания загромождать код ненужными наворотами.
... << RSDN@Home 1.1 beta 2 >>
AVK Blog
Re[3]: Конфигурирование .NET-приложений
От: VBez  
Дата: 02.10.03 07:07
Оценка:
AVK>Ну как бы задача работы в многопоточном режиме не рассматривалась, поэтому не было никакого желания загромождать код ненужными наворотами.


А тогда к чему выделенное?
public class Config
{
   private static object lockFlag = new object();
   public static Config Instance
   {
      ...
      lock(lockFlag)
      {
         ...
      }
   }
}
Re[4]: Конфигурирование .NET-приложений
От: Sinatr Германия  
Дата: 02.10.03 07:22
Оценка:
Привет!

VB>А тогда к чему выделенное?


Ну а может "задача работы в многопоточном режиме" сначала рассматривалась, а потом перестала рассматриваться, чтобы не "загромождать код ненужными наворотами"? Статья — бомба, идея — супер! Где тут можно получить распечатанную копию с автографом автора? Шутки-шутками, а статья — действительно очень нужная и полезная, побольше бы таких.
---
ПроГLамеры объединяйтесь..
Re[4]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.10.03 07:22
Оценка:
Здравствуйте, VBez, Вы писали:

VB>А тогда к чему выделенное?


Баги в статье. Код выдернут из реального проекта.
... << RSDN@Home 1.1 beta 2 >>
AVK Blog
Re: Конфигурирование .NET-приложений
От: фонарь Беларусь блог
Дата: 22.10.03 16:01
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

АК>Статья :



АК>Авторы :

АК>Андрей Корявченко

АК>Аннотация :

АК>Не секрет, что практически каждое приложение требует каких-то настроек. Данная статья рассказывает об одном из возможных способов реализации механизма их хранения и редактирования. Исходные коды взяты из реального приложения, RSDN@Home, оффлайн-клиента для форумов www.rsdn.ru....

вот захотелось мне передать эти настройки в PropertyGrid через Remoting.
и вываливается exception, дескать, AttributeCollection is not marked as serializable (это при реализации ICustomTypeDescriptor, т.к. без него вообще не захотело).

вообще, это можно обойти?
Re[2]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.10.03 05:48
Оценка:
Здравствуйте, фонарь, Вы писали:

Ф>вот захотелось мне передать эти настройки в PropertyGrid через Remoting.

Ф>и вываливается exception, дескать, AttributeCollection is not marked as serializable (это при реализации ICustomTypeDescriptor, т.к. без него вообще не захотело).

Ну наверное можно отнаследоваться от AttributeCollection и таки пометить ее как serializable. Но вобще то идея передавать я так понимаю по ссылке не очень хорошая. Лучше передавать сам конфиг по значению и все обертки делать уже на клиентской стороне.
... << RSDN@Home 1.1 beta 2 >>
AVK Blog
Re[3]: Конфигурирование .NET-приложений
От: фонарь Беларусь блог
Дата: 23.10.03 09:10
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Ну наверное можно отнаследоваться от AttributeCollection и таки пометить ее как serializable.

//да, я собственно так и делал 
[Serializable]
public class MyAttrCollection : AttributeCollection
{
 public MyAttrCollection() : base(null) {}
}

//а потом в реализации ICustomTypeDescriptor
AttributeCollection ICustomTypeDescriptor.GetAttributes() 
{
    return new MyAttrCollection();
}

оно все равно ругается, что not marked as serializable.

AVK>Но вобще то идея передавать я так понимаю по ссылке не очень хорошая. Лучше передавать сам конфиг по значению и все обертки делать уже на клиентской стороне.


согласен. это так, исследование
Re: Конфигурирование .NET-приложений
От: Yuri Россия http://spbdetails.ru
Дата: 20.01.04 13:39
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

Спасибо за отличную статью!

Вопрос: почему в свойстве IsReadOnly класса MyPropDesc возвращается false? По-моему правильнее было бы воазвращать _PropDesc.IsReadOnly.
Take it easy.
Re[2]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 20.01.04 13:52
Оценка:
Здравствуйте, Yuri, Вы писали:

Y>Вопрос: почему в свойстве IsReadOnly класса MyPropDesc возвращается false? По-моему правильнее было бы воазвращать _PropDesc.IsReadOnly.


Ну для конкретного проекта это не критично, а так вобще конечно ты прав.
... << RSDN@Home 1.1.3 beta 1 >>
AVK Blog
Re: Конфигурирование .NET-приложений
От: olegbs Россия  
Дата: 09.06.04 12:35
Оценка:
Здравствуйте, Андрей Корявченко, Вы писали:

Извините, туплю, а хочется побыстрее (в тч оттупиться).
Не работает, что-то подстановка имен в классе конфигурации со вложенными классами для свойств вложенных классов.

public class config

protected mobjA As new AClass
protected mobjB As new BClass
protected mstrDescription as New String

' работает
Public Property Description As string
' работает
Public Readonly Property A As AClass
....

end class

Public Class AClass
protected mstrName as new string

' не работает
Public Property Name As String
...
end class
Re[2]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.06.04 12:54
Оценка:
Здравствуйте, olegbs, Вы писали:

O>Извините, туплю, а хочется побыстрее (в тч оттупиться).

O>Не работает, что-то подстановка имен в классе конфигурации со вложенными классами для свойств вложенных классов.

Что значит вложенных?
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Re[3]: Конфигурирование .NET-приложений
От: olegbs Россия  
Дата: 09.06.04 13:41
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, olegbs, Вы писали:


O>>Извините, туплю, а хочется побыстрее (в тч оттупиться).

O>>Не работает, что-то подстановка имен в классе конфигурации со вложенными классами для свойств вложенных классов.

AVK>Что значит вложенных?

Я попробовал в сообщении это раскрыть, но видно, действительно, туплю :<
А имел я ввиду, что класс Config имеет в своем составе члена, который сам является классом и у него имеются свойства (вот для этих свойств хотелось бы увидеть русские названия)
Примерный текст класса ниже. Могу на С#, но только завтра набью, чтобы не было синтаксических ошибок.


public class Config

protected mobjA As new AClass
protected mstrDescription as New String

' работает
Public Property Description() As String
        Get
            Return mstrDescription
        End Get
        Set(ByVal Value As String)
            mstrDescription = Value
        End Set
End Property

' работает
Public Readonly Property A As AClass
        Get
            Return mobjA
        End Get
End Property

end class

Public Class AClass
protected mstrName as new string

' не работает
Public Property Name As String
        Get
            Return mstrName
        End Get
        Set(ByVal Value As String)
            mstrName = Value
        End Set
End Property
...
end class
Re[4]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.06.04 13:49
Оценка:
Здравствуйте, olegbs, Вы писали:

O>А имел я ввиду, что класс Config имеет в своем составе члена, который сам является классом и у него имеются свойства (вот для этих свойств хотелось бы увидеть русские названия)


А как ты их в гриде сможешь увидеть, он тебе для класса просто его имя выведет?
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Re[5]: Конфигурирование .NET-приложений
От: olegbs Россия  
Дата: 10.06.04 07:41
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, olegbs, Вы писали:


O>>А имел я ввиду, что класс Config имеет в своем составе члена, который сам является классом и у него имеются свойства (вот для этих свойств хотелось бы увидеть русские названия)


AVK>А как ты их в гриде сможешь увидеть, он тебе для класса просто его имя выведет?


<TypeConverter(GetType(MyStatusConverter))> _
Public Class AClass
...
End Class
Re[6]: Конфигурирование .NET-приложений
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.06.04 07:46
Оценка:
Здравствуйте, olegbs, Вы писали:

AVK>>А как ты их в гриде сможешь увидеть, он тебе для класса просто его имя выведет?


O><TypeConverter(GetType(MyStatusConverter))> _

O>Public Class AClass
O>...
O>End Class

Не, ну что из тебя все клещами вытягивать приходится? В конвертере видимо реализован GetProperties? Тогда все понятно. Та версия что в журнале очень старая уже, в дальнейшем этот класс был сильно переработан. Свежая версия отрабатывает DisplayName и в таких случаях, и в enum и еще много чего интересного умеет. Брать как обычно, в CVS януса. Можно еще попробовать дернуть через subversion, адрес репозитория svn://rsdn.ru/Janus.
... << RSDN@Home 1.1.4 beta 2 >>
AVK Blog
Re[7]: Конфигурирование .NET-приложений
От: olegbs Россия  
Дата: 10.06.04 08:02
Оценка:
Спасибо, Андрей !
Моя тупость окончилась. А клещами тащить не надо, не хотел загружать форум тривиальными вещами ))
Задача разовая, поэтому не стал оборачивать класс, а сделал наследование от обертки, как для класса конфигурации, так и для вложенных. Часа два делал, потому что сам дурак, делал изменения, а в propertygrid показывал инстанцию первоначального класса.
Бывает
Удачи
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.