2010-11-20 65 views
2

我有一個Settings.cs類公開一些靜態屬性。這些屬性是隻讀的。這個類駐留在一個獨立的DLL中,而不是網站。網站設置類

在應用程序啓動時,我需要初始化Settings.cs類並使用值填充Static屬性。這應該每個應用程序啓動完成一次。

我掛鉤到Web應用程序中的Application_Start事件。我如何訪問Settings.cs類(駐留在單獨的DLL中)的那些「私有」靜態屬性?

我有一個選項,讓Settings.cs類自己填充。但是,每次應用程序啓動後,我都需要這樣做。

有沒有處理這種情況的設計模式?

謝謝 問候

回答

1
public class Settings 
{ 
    const string SettingPath = "Settings"; 
    public static Settings Instance 
    { 
     get 
     { 
      var result = HttpContext.Application[SettingPath] as Settings; 
      if (result == null) 
      { 
       var result = new Settings(); 
       HttpContext.Current.Application[SettingPath] = result; 
      } 
      return result; 
     } 
    } 

    private Settings() 
    { 
     // Load properies here 
    } 

    // Properties Here 
} 

如果您需要保存每次只會話設置 - 然後用HttpContext.Current.Session [「SessionSetting」]

+0

情況有所不同: Settings.cs駐留在DLL-1中 在Application_Start事件中,我需要填寫class Settings的屬性。我不是在將應用程序對象中的設置。 謝謝 – Bill 2010-11-20 19:06:09

1

而不是編程方式設置從設置Application_Start事件,而是在Web.config中聲明性地指定設置。然後Settings類將從Web.config中讀取並返回這些值。

它會去這樣的事情...在Web.config你可以在<appSettings />部分界定爲您設置的值:

<configuration> 
    <appSettings> 
     <add key="Setting1" value="..." /> 
     <add key="Setting2" value="..." /> 
     ... 
     <add key="SettingN" value="..." /> 
    </appSettings> 

    ... 
</configuration> 

當然,而非Setting1Setting2,等等,你會使用更多描述性名稱進行設置。

在你Settings類代碼將如下所示:

using System.Configuration; 

public class Settings 
{ 
    public int Setting1 
    { 
     get 
     { 
      return Convert.ToInt32(ConfigurationManage.AppSettings["Setting1"]); 
     } 
    } 

    public string Setting2 
    { 
     get 
     { 
      return ConfigurationManage.AppSettings["Setting1"]; 
     } 
    } 

    ... 
} 

注意閱讀<appSettings>使用ConfigurationManage.AppSettings["settingName"]的值。這將返回指定應用設置的value作爲字符串。因此,如果某些屬性是整數,布爾值或其他類型,則需要像上面的Setting1那樣相應地轉換它們。

有關使用<appSettings>部分的更多信息,請參閱AppSettings in Web.config

快樂編程!

+0

嗨斯科特,讓我解釋一下我後面,也許它會更清晰。我有一個settings.cs類包含「Interfaces」類型的屬性。我使用Unity來定義我的默認實現接口。我需要在application_start初始化settings.cs,初始化意味着解析接口實現。但是,我有一個引導程序掛接到application_start,它執行幾件事情然後解析對象。我想要的是保持屬性RO屬性,但是能夠填充一次,而不是每隔一個請求來提高性能。謝謝 – Bill 2010-11-22 05:38:45