2010-09-07 8 views
0

hi
Этот код работает нормально, и мой конфигурационный файл изменяется правильно.Запись в файле конфигурации Задача

//Local Variable Declaration 
System.Configuration.Configuration oConfig = 
    System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(
    Request.ApplicationPath); 

if (oConfig .AppSettings.Settings["CompanyName"] == null) 
{ 
    oConfig AppSettings.Settings.Add("CompanyName", "MyCompanyName"); 
    oConfig .Save(); 
} 

, но когда я хочу, чтобы использовать свойство для этой цели Ничего в Config случилось файл.

// Декларация собственности

private System.Configuration.Configuration _oRootConfig; 

public System.Configuration.Configuration oRootConfig 
{ 
    get 
    { 
     return 
      System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(
      Request.ApplicationPath);   

    } 
    set { _oRootConfig = value; } 
} 

if (oRootConfig.AppSettings.Settings["CompanyName"] == null) 
{ 
    oRootConfig.AppSettings.Settings.Add("CompanyName", "MyCompanyName"); 
    oRootConfig.Save(System.Configuration.ConfigurationSaveMode.Modified, true); 
} 

теперь у меня есть два вопроса:
1-почему этот код оленья кожа работа, и там ошибки нет.
2-Если я хочу программировать в объектно-ориентированном образом, что я могу сделать, чтобы исправить это свойство , если проблема связана с этим свойством. благодаря

ответ

2

Вы повторное открытие конфигурации на каждом получить, сделать это вместо того, чтобы:

get 
{ 
    if(this._oRootConfig == null) 
     this._oRootConfig = (System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)); 
    return this._oRootConfig; 
} 
+0

Да, я пропустил это ... хороший момент. –

+0

hi man you re great, ваше решение отлично работает, не могли бы вы объяснить больше, это шаблон, которого я точно не видел? Спасибо – siamak

+0

Проблема в том, что вы не понимаете, что такое свойство на самом деле. Это просто синтаксический сахар, тонкость языка. Все, что происходит при компиляции свойства, - это то, что getter превращается в функцию get , а сеттер превращается в функцию set (я думаю). Сделайте некоторые googling, но просто не забывайте относиться к функциям getter и setter, потому что их код будет запускаться каждый раз, когда они будут вызваны. – MStodd

1

Эта строка кода:

get 
{ 
return (System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)); 
} 

set { _oRootConfig = value; } 

вы не устанавливая _oRootConfig в вашем ГЭТ. Вам нужен этот код:

get 
{ 
    _oRootConfig = (System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)); 
    return _oRootConfig; 
} 

set 
{ 
    _oRootConfig = value; 
} 
Смежные вопросы