【问题标题】:Settings Class in Website网站中的设置类
【发布时间】:2010-11-20 17:19:31
【问题描述】:

我有一个 Settings.cs 类,它公开了一些静态属性。这些属性是只读的。此类驻留在与网站不同的 DLL 中。

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

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

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

有处理这种情况的设计模式吗?

谢谢 问候

【问题讨论】:

    标签: c# asp.net design-patterns


    【解决方案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"]

    【讨论】:

    • 情况不同:Settings.cs驻留在DLL-1里面的Application_Start事件中,我需要填写类Settings的属性。我不是在将设置放入应用程序对象之后。谢谢
    【解决方案2】:

    不是以编程方式设置来自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"];
            }
        }
    
        ...
    }
    

    请注意,要读取 &lt;appSettings&gt; 中的值,请使用 ConfigurationManage.AppSettings["settingName"]。这会将命名应用设置的value 作为字符串返回。因此,如果某些属性是整数、布尔值或其他类型,您需要像我在上面对 Setting1 所做的那样对它们进行相应的转换。

    有关使用&lt;appSettings&gt; 部分的更多信息,请参阅AppSettings in Web.config

    编程愉快!

    【讨论】:

    • 嗨,斯科特,让我解释一下我的目标,也许会更清楚。我有一个 settings.cs 类包含“接口”类型的属性。我正在使用 Unity 定义我的默认值这些接口的实现。我需要在application_start初始化settings.cs一次,初始化意味着解析接口实现。但是,我有一个连接到 application_start 的引导程序,它会做几件事然后解析对象。我想要的是保留属性 RO 属性,但是能够填充它一次,而不是在每次进一步请求时填充它以提高性能。谢谢
    猜你喜欢
    • 2012-06-14
    • 2012-07-21
    • 2013-07-24
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多