我有一个Settings.cs类,它暴露了一些静态属性。这些属性是只读的。此类位于与网站不同的DLL中。
在应用程序启动时,我需要初始化Settings.cs类并使用值填充Static属性。每次应用程序启动时应执行一次。
我正在连接Web应用程序中的Application_Start事件。如何访问Settings.cs类上的那些“私有”静态属性(驻留在单独的DLL中)?
我有一个选项,让Settings.cs类填充自己。但是,每次应用程序启动时我都需要这样做。
是否有设计模式来处理这种情况?
谢谢 问候
答案 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>
当然,您可以为设置使用更具描述性的名称,而不是Setting1
,Setting2
等。
在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。
快乐编程!