如何在 ASP.Net 页面和其他项目之间共享对象

本文关键字:项目 其他 之间 共享 对象 ASP Net | 更新日期: 2023-09-27 18:34:36

我有一个对象(ClientConfiguration(,我几乎在网站的每个页面上都使用它,以及在编译到网站的相关项目中存在的许多方法中使用。

我现在正在做的是在每个页面加载时创建和填充对象,并将其存储在 HttpContext 中。这适用于 UI 项目中的任何内容;对于 dll 项目中的任何内容,我将客户端配置传递给可能需要使用它的任何方法。

宁愿做的是拥有一个在所有相关项目之间共享的"全局"属性,这样我就不必传递它。

有没有好方法可以做到这一点?

如何在 ASP.Net 页面和其他项目之间共享对象

添加 System.Web.dll 作为其他库项目中的引用后,可以直接在 HttpContext 中访问该对象,无需作为参数传递。

这有点取决于初始配置的存储位置(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存储在全局应用程序对象中,并使其在所有页面中可用,因此您不必在页面加载中创建它。

你可以像这样使用它

private void Foo()
{
    ClientConfiguration config = Config.Current;
}

如果有多个项目需要共享相同的数据,则最好将对象存储在数据库或共享 XML 文件中,并创建新的类库项目,以便可以只包含对 Config 类的引用。