如何在每个线程的全局列表中收集传入的对象

时间:2017-09-07 19:27:32

标签: c# asp.net-mvc

我正在向控制器发送一个数据对象,每次调用控制器时都必须将每个对象存储在一个对象列表中,直到所有对象都被收集并准备好进行处理。

我对术语不是很了解,但我认为这称为缓冲。

我有这个:

    public class MyController : Controller
    {
        private readonly List<int> _objectList;
        public MyController()
        {
            if (_objectList == null)
            {
                _objectList = new List<int>();
            }
        }
        [HttpPost]
        public void Index(int newObject)
        {
            _objectList.Add(newObject);
            Console.Write($"object {newObject} added");
        }
    }

因此,每次将数据发布到控制器_objectList始终为null。只要应用程序正在运行,我怎样才能保存所有进入Index的数据。

2 个答案:

答案 0 :(得分:0)

为每个请求创建和回收控制器,这就是_objectList始终为空的原因。

如果要保存所有进入Index的数据,只要应用程序正在运行,您就可以使用通过Application对象上的HttpContext属性访问的ASP.NET应用程序状态。此对象将在所有会话中可用。如果您希望每个会话单独_objectList,则可以使用通过Session对象上的HttpContext属性访问的会话状态。

答案 1 :(得分:0)

我会使用依赖注入来初始化MyController。这使控制器有责任处理传入的数据,但不必担心数据的存储方式。有点像这样......

public class MyController
{
   private IStoreInts storage;    
   public MyController(IStoreInts storage){this.storage = storage;}

    [HttpPost]
    public void Index(int value){
      storage.Add(value);
     }
}