2016-07-26 4 views
0

ein Objektverweis ist erforderlich, nicht statisches Feld, Methode oder Eigenschaft zuzugreifenWenn die Methode statisch zu machen - ein Objektverweis erforderlich ist, nicht statisches Feld zuzugreifen,

Wenn ich das GetCartId statische Visual Studio machen beklagt

public class Uno 
{ 
    private readonly HttpContext context; 

    public Uno() 
    { 
    } 

    public Uno(HttpContext _context) 
    { 
     context = _context; 
    } 
    public static string GetCartId() 
    { 
     string cartId = ""; 
     var stringId = context.Session.GetString("cart"); 
     if(stringId == null) 
     { 
      cartId = Guid.NewGuid().ToString(); 
      stringId = cartId; 
     } 
     else if(stringId != null) 
     { 
      cartId = stringId; 
     } 
     return cartId; 
    } 
} 
+1

@poke, ich war falsch stimm-close dieses mit allgemeinem „Zugang Instanz des aus statischer“ Frage. Diese Frage ist eher "HttpContext.Current" verwandt. – Sinatr

Antwort

3

Sie greifen von dieser Methode auf context zu. Es muss statisch sein, um der Lage sein, es zu benutzen:

private static readonly HttpContext context; 

readonly es nicht static machen. Es ist readonly auf Instanzenebene. (const auf der anderen Seite ist statisch per Definition)

Ich möchte Sie warnen, wenn static zu verwenden, um mit einem HttpContext seit static über Instanzen in ASP.NET gemeinsam genutzt wird. Sie könnten am Ende Benutzer Sitzungen mischen!

Verwendung HttpContext.Current aus der statischen Methode selbst.

+0

Ja, es hat sich gelöst. Danke – Rampp

2

context ist nicht statisch, so dass Sie von einer statischen Methode ohne eine Instanz von Uno nicht darauf zugreifen können. Aber selbst dann können Sie nicht darauf zugreifen, weil es private ist.

Stattdessen würde ich HttpContext.Current verwenden, die auch in einer statischen Methode funktioniert:

public static string GetCartId() 
{ 
    var context = HttpContext.Current; 
    if(context == null) return null; 
    string cartId = ""; 
    var stringId = context.Session.GetString("cart"); 
    if(stringId == null) 
    { 
     cartId = Guid.NewGuid().ToString(); 
     stringId = cartId; 
    } 
    else if(stringId != null) 
    { 
     cartId = stringId; 
    } 
    return cartId; 
} 
+0

ja, ich habe erkannt und bearbeitet meinen Code. Nun, es funktioniert, danke. – Rampp