我有一个对象(ClientConfiguration),我几乎在我网站的每个页面上使用它,以及在编译到网站中的相关项目中存在的许多方法中。
我现在正在做的是在每个页面加载时创建和填充对象,并将其存储在 HttpContext 中。这适用于 UI 项目中的任何内容;对于 dll 项目中的任何内容,我将 ClientConfiguration 传递给可能需要使用它的任何方法。
我宁愿做的是拥有一个在所有相关项目之间共享的“全局”属性,所以我不必传递它。
有没有什么好方法可以做到这一点?
这在一定程度上取决于初始配置的存储位置(xml 文件、数据库或其他),但您会明白这一点。
如果这些是所有应用程序用户都相同的全局配置设置,您可以创建这样的类
public class Config
{
public static ClientConfiguration Current
{
get
{
if (HttpContext.Current.Application["clientconfig"] == null)
{
//Fill object from database
}
return HttpContext.Current.Application["clientconfig"] as ClientConfiguration;
}
set
{
//store object in database
//invalidate what is stored in application object
//so that it will be refreshed next time it's used
HttpContext.Current.Application["clientconfig"] = null;
}
}
}
这将存储ClientConfiguration
全局 Application 对象并使其在所有页面中可用,因此您不必在页面加载时创建它。
你可以像这样使用它
private void Foo()
{
ClientConfiguration config = Config.Current;
}
如果您有多个项目需要共享相同的数据,那么最好将对象存储在数据库或共享 XML 文件中并创建新的类库项目,以便您可以只包含对 Config 类的引用。
在您的其他库项目中添加 System.Web.dll 作为引用后,您可以直接访问 HttpContext 中的对象,无需作为参数传递。