【问题标题】:How to avoid call of constructor?如何避免调用构造函数?
【发布时间】:2016-08-23 16:35:07
【问题描述】:

我正在使用带有 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(正常)。然后我将它更新为 50。有一个断点我可以看到它在存储库中确实是 50。当我再次调用getMyNumber函数时,结果是100。

看起来MyController 的构造函数被我的每个请求调用。如果是这样,更新数据和使用更新数据的方法是什么?

【问题讨论】:

  • 考虑向您的 ApiController 添加一个构造函数并通过依赖注入注入您的存储库的一个实例。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-03-17
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2015-01-23
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多