Как получить 2 разных раздела из web.config, используя один базовый класс ConfigurationSection? - PullRequest
0 голосов
/ 14 сентября 2011

Мне нужно получить данные из раздела viewModelSettings в web.config

<vmSettings namespace="Site.Web.ViewModels" assembly="Site.Web"/>

и чтобы иметь возможность получить такое пространство имен, как это VM.Settings.Namespace VM2.Settings.Namespace

Я создал следующий класс, поэтому я мог бы использовать его как VM.Settings.Namespace

public class VM : ConfigurationSection
    {
        private static VM _settings = ConfigurationManager.GetSection("vmSettings") as VM;

        public static VM Settings
        {
            get { return _settings; }
        }  

   [ConfigurationProperty("namespace", IsRequired = true)]
        public string Namespace
        {
            get
            {                
                return (string)base["namespace"];
            }
        }
        [ConfigurationProperty("assembly", IsRequired = true)]
        public string Assembly
        {
            get
            {
                return (string)base["assembly"];
            }
        }        
    }

Теперь у меня есть другой раздел ( vmSettings2 ), такой же, каквыше одного, но с другим именем <vmSettings2 namespace="Site2.Web.ViewModels" assembly="Site2.Web"/>

Я не хотел писать другой класс ConfigurationSection, но использовал вышеупомянутый (но он должен получить раздел vmSettings2 ) и использовать его как VM2.Settings.Namespace.Как я мог реализовать это?Может быть, наследовать от класса VM, но как переопределить имя раздела?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

Попробуйте это:

    public class VM : ConfigurationSection
    {

        public static VM GetSection(string section)
        {
            return ConfigurationManager.GetSection(section) as VM;
        }  

        [ConfigurationProperty("namespace", IsRequired = true)]
        public string Namespace
        {
            get
            {                
                return (string)base["namespace"];
            }
        }
        [ConfigurationProperty("assembly", IsRequired = true)]
        public string Assembly
        {
            get
            {
                return (string)base["assembly"];
            }
        }        
    }
0 голосов
/ 14 сентября 2011

Не могли бы вы преобразовать свой класс VM в абстрактный базовый класс?

Тогда вы могли бы получить два класса из названных vmSettings1 и vmSettings2, которые просто использовали бы методы, определенные в базовом классе?

Вы могли бы использовать VM как интерфейс, но тогда вы бывынужден реализовывать каждый метод для каждого класса, что, возможно, является тем типом вещей, которых вы надеетесь избежать здесь.

...