ASP.NET Custom ConfigurationSection из указанного проекта не работает? - PullRequest
0 голосов
/ 21 мая 2011

Я создал собственный класс, который наследуется от System.Configuration.ConfigurationSection, реализованный так (это очевидно, просто для запуска реальной конфигурации):

public class Config : ConfigurationSection
{
    [ConfigurationProperty("quoteOfTheDay", DefaultValue = "It is what it is.", IsRequired = false)]
    public string QuoteOfTheDay
    {
        get
        {
            return this["quoteOfTheDay"] as string;
        }
    }

    [ConfigurationProperty("yourAge", IsRequired = true)]
    public int YourAge
    {
        get
        {
            return (int)this["yourAge"];
        }
    }
}

Полное пространство имен + имя классаэто MyApp.Core.Config, он находится в проекте MyApp.Core, который компилируется в сборку MyApp.Core.dll.Затем я ссылался на этот проект из своего проекта ASP.NET/MVC3, который называется MyApp.UI.Я отредактировал файл Web.config, добавив элементы sectionGroup и section, например:

  <configSections>
    <sectionGroup name="myAppConfigGroup">
      <section name="myAppSection" 
           type="MyApp.Core.Config, MyApp.Core, Version=1.0.0.0, Culture=neutral, PublicKey=null" 
           allowLocation="true" 
           allowDefinition="Everywhere" />
    </sectionGroup>
  </configSections>

  <myAppConfigGroup>
    <myAppSection>

    </myAppSection>
  </myAppConfigGroup>

Однако, похоже, что тип MyApp.Core.Config не используется для проверки правильностиКонфигурация или предоставить Intelli-смысл, как я редактирую конфигурацию.Вот некоторые наблюдения, которые я сделал:

  • Я определил свойство yourAge как IsRequired = true, и приложение работает без него.
  • Я даже могу изменить тип (нанекоторый тип, который даже не существует, например, Foo.Bar) в элементе <section>, и все по-прежнему работает нормально
  • Но если я удалю элемент <section>, приложение не запустится.

Я сбит с толку, любая помощь?

1 Ответ

1 голос
/ 21 мая 2011

Вы, вероятно, не используете конфигурацию? Если вы не используете его, он будет только проверять, зарегистрированы ли корневые узлы через configSections, но не будет смотреть подробности на этом этапе.

Когда вы на самом деле загрузите его, используя ConfigurationManager.GetSection, настройки будут проверены, и в вашем случае эта конфигурация вызовет исключение, сообщающее, что обязательное свойство YourAge отсутствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...