[英]How does this dependency injection (DI) service maintain data when it is registered as transient?
[英]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.