.NET ConfigurationElementCollection.Add метод не добавляет элемент в коллекцию - PullRequest
1 голос
/ 08 декабря 2011

У меня есть настраиваемый раздел конфигурации, работающий под ASP.NET 4.0, в который я хотел бы сохранить изменения.Используются следующие классы:

  • QueueConfiguration: a ConfigurationElement
    • QueueCollection Queues // список поддерживаемых очередей
  • QueueCollection: aConfigurationElementCollection
  • Очередь: элемент конфигурации

Это работает:

// This is a test case to ensure the basics work
Queue newQueue = new Queue();
QueueCollection queues = new QueueCollection();
queues.Add(newQueue); // queues.Count is incremented here

Это не работает (и не выдает ошибку):

// Read existing QueueConfiguration
Queue newQueue = new Queue();
QueueConfiguration queueConfig = ConfigurationManager.GetSection("Queuing") as QueueConfiguration;
queueConfig.Queues.Add(newQueue); // queues.Count is NOT incremented here

Это также не работает (и не выдает ошибку):

// Load QueueConfiguration from web.config
Queue newQueue = new Queue();
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
QueueConfiguration queueConfig = config.GetSection("Queuing") as QueueConfiguration;
queueConfig.Queues.Add(newQueue); // queues.Count is NOT incremented here    

Моим первым шагом было то, что один из трех разделов конфигурации был помечен как доступный только для чтения.Однако при отладке метод IsReadOnly () возвращает false для моего экземпляра QueueConfiguration и QueueCollection.

Мой класс QueueCollection включает в себя этот фрагмент:

public void Add(Queue queue)
{
  base.BaseAdd(queue, true);
}

Когда я выполняю код,эта строка достигнута, base.BaseAdd вызывается, но свойство Count не увеличивается.Как будто BaseAdd просто игнорирует запрос.

Есть предложения?(Надеюсь, я упускаю что-то очевидное!)

1 Ответ

0 голосов
/ 09 декабря 2011

Вы вызывали Config.Save () после добавления времени в свою очередь.

Configuration config = WebConfigurationManager.OpenWebConfiguration("~");

//Do work

config.Save();
...