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

时间:2013-10-10 02:41:06

标签: c# asp.net

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

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

我宁愿做的是拥有一个在所有相关项目中共享的“全局”属性,所以我不必传递它。

有没有很好的方法来实现这个目标?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这取决于存储初始配置的位置(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类的引用。