网站中的设置类

时间:2010-11-20 17:19:31

标签: c# asp.net design-patterns

我有一个Settings.cs类,它暴露了一些静态属性。这些属性是只读的。此类位于与网站不同的DLL中。

在应用程序启动时,我需要初始化Settings.cs类并使用值填充Static属性。每次应用程序启动时应执行一次。

我正在连接Web应用程序中的Application_Start事件。如何访问Settings.cs类上的那些“私有”静态属性(驻留在单独的DLL中)?

我有一个选项,让Settings.cs类填充自己。但是,每次应用程序启动时我都需要这样做。

是否有设计模式来处理这种情况?

谢谢 问候

2 个答案:

答案 0 :(得分: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”]

答案 1 :(得分: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"]。这会将指定的app设置的value作为字符串返回。因此,如果某些属性是整数,布尔值或其他类型,则需要像上面的Setting1那样相应地转换它们。

有关使用<appSettings>部分的详细信息,请参阅AppSettings in Web.config

快乐编程!