2010-09-07 73 views
0


此代碼工作正常,我的配置文件更改正確。寫入配置文件問題

//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(); 
} 

,但是當我想用一個屬性用於此目的沒有在配置文件happend。

//財產申報

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

是的,我錯過了...好點。 – 2010-09-07 17:33:52

+0

嗨,你很好,你的解決方案工作正常,你能解釋更多,這是一種模式,我什麼都錯過了嗎?謝謝 – siamak 2010-09-07 17:44:16

+0

問題是,你不明白什麼屬性實際上是。它只是語法糖,是語言的一個精妙之處。編譯屬性時發生的所有事情都是getter變成了一個名爲get 的函數,setter變成了一個名爲set 的函數(我認爲)。做一些谷歌搜索,但只要記住把getter和setter作爲函數,因爲他們的代碼每次被調用時都會運行。 – MStodd 2010-09-07 18:09:47

1

這行代碼:

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

set { _oRootConfig = value; } 

你是不是在你的GET設置_oRootConfig。你需要這個代碼:

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

set 
{ 
    _oRootConfig = value; 
}