我正在使用ASP.NET和AngularJS的REST API创建项目。
我的存储库:
Class MyRepository {
private int myVariable;
public MyRepository() {
myVariable = 100;
}
public int getMyVariable() {
return myVariable;
}
public int Update(int data) {
myVariable = data;
return data;
}
}
控制器:
public Class MyController : ApiController {
private MyRepository repository = new MyRepository();
[Route("myRoute")]
public int getVariable() {
return getMyVariable();
}
[Route("myRoute")]
[HttpPut]
public IHttpActionResult Update(int data)
{
data = repository.Update(data);
return Ok(data);
}
}
JS服务中的方法:
getMyNumber = function () {
return $http.get("/myRoute");
};
updateMyNumber = function (number) {
return $http.put("/myRoute", number);
}
首先我调用函数getMyNumber
。结果是100(ok)。然后我将它更新为50.有一个断点我可以看到它在存储库中真的是50。当我再次调用getMyNumber
函数时,结果为100.
看起来我的每个请求都会调用MyController
的构造函数。如果是这样,更新数据和使用更新数据的方法是什么?
答案 0 :(得分:0)
是的,控制器的范围限定为每个请求,因此每次有请求时,您都会将其与存储库对象一起进行新建。听起来您正在避免使用数据库,并且在应用程序的生命周期之外不需要任何持久性。因此,在这种情况下,您将使用应用程序生存期范围存储值,这意味着处理并发。也许你需要的是这里描述的解决方案之一:http://www.wiktorzychla.com/2010/12/container-based-pseudosingletons-in.html