Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Singleton模式/检查Null-使用Asp.Net与会话时_C#_Asp.net - Fatal编程技术网

C# Singleton模式/检查Null-使用Asp.Net与会话时

C# Singleton模式/检查Null-使用Asp.Net与会话时,c#,asp.net,C#,Asp.net,在下面的代码中,我希望Asp.net应用程序中每个会话只执行一次“GetClassTeacher”方法,在调用数据库之前,我使用会话检查对象是否为null 我的问题是,这是实现此方法的最佳方式,还是可以使用单例模式来完成此任务,如果可以,如何在每个会话中实现它 public class School { public List<Student> GetAllStudents() {} public List<Teacher> GetAllTeachers

在下面的代码中,我希望Asp.net应用程序中每个会话只执行一次“GetClassTeacher”方法,在调用数据库之前,我使用会话检查对象是否为null

我的问题是,这是实现此方法的最佳方式,还是可以使用单例模式来完成此任务,如果可以,如何在每个会话中实现它

public class School
{
   public  List<Student> GetAllStudents() {}

  public  List<Teacher>  GetAllTeachers() {}    

  //Singleton pattern or Check for Null
  public Teacher GetClassTeacher()
   {
       Teacher  teacher = new Teacher();
       teacher = Session["Teacher"] as Teacher
       if (teacher == null)
       {
            //Get Teacher Info from Database
       }   
   }
}
公立学校
{
公共列表GetAllStudents(){}
公共列表GetAllTeachers(){}
//单例模式或检查是否为空
公共教师GetClassTeacher()
{
教师=新教师();
教师=课时[“教师”]作为教师
如果(教师==null)
{
//从数据库获取教师信息
}   
}
}

我认为使用session是可以的,但是如果不需要,您可以通过不实例化teacher对象来减少一些开销:

   public Teacher GetClassTeacher()
   {
       var teacher = Session["Teacher"] as Teacher
       if (teacher == null)
       {
            //Get Teacher Info from Database
       }   
   }

下面是一个单例示例:。此外,对不同实现的一些调查:


否则,我不知道如何说使用单例(或不使用单例)是“最好的”。你的情况将有助于决定它。就我个人而言,我在asp.net中做的工作并不需要它。

检查null是完全有效的。使用会话也是有效的

    public static Teacher GetClassTeacher()
    {
        Teacher teacher = HttpContext.Current.Session["Teacher"] as Teacher;
        if (teacher == null)
        {
            //Get Teacher Info from Database
            teacher = GetTeacherFromDB();
            HttpContext.Current.Session["Teacher"] = teacher;                
        }
        return teacher;
    }

为什么要创建一个新的
Teacher
实例,然后每次调用
GetClassTeacher()
时都丢弃它?谢谢你的回复,你认为当你从会话实例化并分配它时会占用更多内存吗,实例化一个对象肯定会使用内存——我假设如果找不到老师,就返回null。另一方面,如果您返回一个新创建的教师对象,那么您应该保留现有的对象。在任何情况下,会话状态都可以使用,只要内存有点不稳定,并且如果应用程序变大时不会出现缩放问题。@user841683:任何时候你说
new…
,它都会使用内存。这只允许您避免创建一个新实例,而您最终会在下一行中覆盖该实例。在Asp.Net中,在什么情况下,我将使用singleton,因为大多数工作都可以通过Session/Cache/Static来完成,方法是检查它是否为null,如果我理解singleton…大,如果…它们旨在阻止您创建更多一个类的多个实例。但是,如果它们能够中断代码执行,那么它们可能是一个大问题。只要在实例化之前仔细检查null,那么无论是否使用单例,效果都是一样的。那为什么要用它呢?我想说不要。这里有一个更深入的讨论: