如何避免构造函数的调用?

时间:2015-04-12 09:42:10

标签: asp.net angularjs rest asp.net-web-api routing

我正在使用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的构造函数。如果是这样,更新数据和使用更新数据的方法是什么?

1 个答案:

答案 0 :(得分:0)

是的,控制器的范围限定为每个请求,因此每次有请求时,您都会将其与存储库对象一起进行新建。听起来您正在避免使用数据库,并且在应用程序的生命周期之外不需要任何持久性。因此,在这种情况下,您将使用应用程序生存期范围存储值,这意味着处理并发。也许你需要的是这里描述的解决方案之一:http://www.wiktorzychla.com/2010/12/container-based-pseudosingletons-in.html