繁体   English   中英

为什么当服务注册为瞬态时,内存中的存储库没有在不同的请求中重置?

[英]Why isn't the in-memory repository reset in different requests when the service is registered as transient?

我试图理解AddTransient方法的含义。 我创建了一个 asp.net webapi,完整的项目可以在这里看到。

让我在这里引用主要代码:

public class StudentService : IStudentService
{
    private static List<Student> students = new List<Student>
    {
        new Student{Id=1,Name="Andy"},
        new Student{Id=2,Name="Bobby"}
    };


    public List<Student> Create(Student student)
    {
        students.Add(student);
        return students;
    }

    public List<Student> GetAll()
    {
        return students;
    }
}

[ApiController]
[Route("[controller]")]
public class StudentController : ControllerBase
{
    private readonly IStudentService iss;

    public StudentController(IStudentService iss)
    {
        this.iss = iss;
    }
    [HttpGet]
    public ActionResult<List<Student>> GetAll()
    {
        return Ok(iss.GetAll());
    }

    [HttpPost]
    public ActionResult<List<Student>> Create(Student student)
    {
        iss.Create(student);
        return Ok(iss.GetAll());
    }
}

据我了解,由于该服务注册为瞬态服务,因此每个请求都应将students字段重置为 2 Student的列表。 换句话说,每次通过发送 POST 请求创建新的Student ,服务器应该响应一个只有 3 个Student的列表。

但事实证明,如果我进行多次创建,响应中的Student数量会越来越大。

问题

为什么当服务注册为瞬态时,内存中的存储库没有在不同的请求中重置?

因为students字段是 static。

是的,临时服务 class 每次都会实例化,但在您的情况下,每个实例都使用相同的 stafic 字段。

只需删除 static 修饰符,它就会按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM