c# - 如何在 asp.net 中只创建一个类的实例

标签 c# asp.net

类的实例是在 aspx 页面的部分类中创建的。在 page_load 或按钮单击方法下,我试图将值设置为类。但是当每次回发发生时,都会创建新实例,并且我会丢失以前的值。

public partial class DatabaseSelection : System.Web.UI.Page
     {
        DBProperties dbpro;
        Metadata obmeta;      

    protected void Page_Load(object sender, EventArgs e)

        {
            if (!IsPostBack)
            {
               dbpro = new DBProperties();

            }  

最佳答案

如果应用程序需要这个实例,请将其放入应用程序或使用单例集合:

应用程序["Foo"] = new MyClass(); 查看其他答案。

如果您需要它用于单个请求(这里似乎不太可能):

HttpContext.Current.Items["Foo"] = new MyClass();

如果您需要跨请求执行此操作,则可以根据您的情况选择以下所有选项:

  • 序列化为 Cookie(将在每次请求时传输,因此如果管道有问题,请不要使用它)。适用于每个用户数据。
  • 存储在 Session 中:Session["Foo"] = new MyClass();//我个人不喜欢这个选项,因为它会随着用户群的增长而增加你的内存压力,但如果它很小,那么这是一个不错的选择,因为它不会增加带宽消耗和性能。适合每个用户存储。并且可以配置对数据库或内存(以及其他)的持久性。
  • 存储在缓存中。好处是可以很好地控制生命周期,并且可以根据您使用的 key 灵活地控制每个用户。
  • 存储在 ViewState 中。适合单个请求,可扩展,但会增加负载。
  • 存储在hidden var中(和ViewState差不多)

我不太确定我会推荐单例模式。从技术上讲,只要您的 AppDomain 有效地类似于 Application 变量,单例就会一直存在。

关于c# - 如何在 asp.net 中只创建一个类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5561604/

相关文章:

c# - 哪一层应该包含 ICommand?

c# - 关于多语言 URL 重写

c# - 仍在与 JSON.net 日期格式作斗争

c# - 为什么在 PartialView 上使用 EditorFor 在 MVC 4.5+ 中呈现局部 View

c# - 使用带有 <%@ Register %> 的空 TagPrefix

c# - Windows 上的应用程序以参数启动

c# - 如何检测图像中能量最低的区域

c# - EntityType 'Uri' 没有定义键

c# - ScrollViewer 内的 WPF DataGrid

jquery - 没有表单标签的不引人注目的验证