2016-07-26 3 views
0

객체 참조는 내가 만들 때가 - 객체 참조가 비 정적 필드에 액세스하는 데 필요한,

가 GetCartId 정적 비주얼 스튜디오 불평 비 정적 필드, 메서드 또는 속성에 액세스하는 데 필요한

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, 나는 투표-에 가까운 질문 일반적으로 "정적에서 액세스 인스턴스 멤버"이 일을 잘못 :

대신 난 정적 메서드에서 작동 HttpContext.Current을 사용합니다. 이 질문은 오히려'HttpContext.Current'와 관련이 있습니다. – Sinatr

답변

3

해당 방법으로 context에 액세스하고 있습니다. 그것은을 사용할 수 있도록하기 위해 정적 할 필요가 :

private static readonly HttpContext context; 

readonly

static하지 않습니다. 인스턴스 레벨에서는 readonly입니다. ASP.NET에서 인스턴스간에 공유되는 HttpContext static 이후로 static을 사용하지만

내가 당신을 경고 것이다 (반면에 const는 정의에 의해 정적). 결국 사용자 세션이 혼합 될 수 있습니다!

정적 메서드 자체에서 HttpContext.Current을 사용하십시오.

+0

예, 해결되었습니다. 고맙습니다. – Rampp

2

context은 정적이 아니므로 Uno 인스턴스없이 정적 메서드에서 액세스 할 수 없습니다. 하지만 심지어 private이기 때문에 액세스 할 수 없습니다.

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

예, 제 코드를 깨닫고 편집했습니다. 자, 고마워. – Rampp

관련 문제