2017-09-07 2 views
0

Ich sende ein Objekt von Daten an einen Controller, der jedes Objekt in einer Liste von Objekten jedes Mal speichert, wenn der Controller aufgerufen wird, bis alle Objekte gesammelt und für die Verarbeitung bereit sind .Wie eingehende Objekte in einer Liste global pro Thread gesammelt werden

Ich bin nicht sehr gut mit der Terminologie, aber ich denke, dass dies als Pufferung bezeichnet wird.

Ich habe dies:

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"); 
     } 
    } 

jedes Mal Post-Daten an die Steuerung So _objectList immer null beginnt. Wie kann ich alle Daten, die in den Index gehen, weiterhin speichern, solange die Anwendung läuft?

Antwort

0

Controller werden für jede Anfrage erstellt und recycelt, deshalb startet _objectList immer Null.

Wenn Sie alle Daten im Index speichern möchten, solange die Anwendung ausgeführt wird, können Sie den ASP.NET-Anwendungsstatus verwenden, auf den über die Application-Eigenschaft auf dem Objekt HttpContext zugegriffen wird. Dieses Objekt wird in allen Sitzungen verfügbar sein. Wenn Sie eine separate _objectList pro Sitzung möchten, würden Sie den Sitzungsstatus verwenden, auf den über die Session-Eigenschaft für das Objekt HttpContext zugegriffen wird.

+0

Ich speicherte es in der Anwendung. Das hat perfekt funktioniert. – NeoSketo

0

Ich würde MyController mit Abhängigkeitsinjektion initialisieren. Dadurch bleibt die Controller-Verantwortlichkeit für die Verarbeitung der eingehenden Daten, aber nicht für die Speicherung der Daten. Etwas im Sinne dieser ..

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

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