2017-12-23 42 views
1

일부 코드를 ASP.NET Core 2으로 업그레이드하고 싶습니다. 나는 HttpContext.CurrentASP.NET Core 2에서 제거되었으며 IHttpContextAccessor을 사용해야 함을 알고 있습니다.ASP.NET 코어 2의 HttpContext.Current.Items.Contains (DataContextKey)에 대한 대안

하지만이 코드를 대체하는 방법을 모르겠어요 :

HttpContext.Current.Items.Contains (DataContextKey를)

내가 어떻게 할 수 있습니까?

전체 코드 :

namespace Jahan.Infrastructure.DataAccess.DataContextStorage 
{ 
    public class HttpDataContextStorageContainer<T> : IDataContextStorageContainer<T> where T : class 
    { 
     private const string DataContextKey = "DataContext"; 

     public T GetDataContext() 
     { 
      T objectContext = null; 
      if (HttpContext.Current.Items.Contains(DataContextKey)) 
      { 
       objectContext = (T)HttpContext.Current.Items[DataContextKey]; 
      } 
      return objectContext; 
     } 

     public void Clear() 
     { 
      if (HttpContext.Current.Items.Contains(DataContextKey)) 
      { 
       HttpContext.Current.Items[DataContextKey] = null; 
      } 
     } 

     public void Store(T objectContext) 
     { 
      if (HttpContext.Current.Items.Contains(DataContextKey)) 
      { 
       HttpContext.Current.Items[DataContextKey] = objectContext; 
      } 
      else 
      { 
       HttpContext.Current.Items.Add(DataContextKey, objectContext); 
      } 
     } 
    } 
} 

답변

1

를 주입 IHttpContextAccessor 그 통해 현재 HttpContext에 액세스 할 수 있습니다. 나머지는 리팩터링하기에 충분히 단순해야합니다.

예를 들면.

public class HttpDataContextStorageContainer<T> : IDataContextStorageContainer<T> where T : class { 
    private const string DataContextKey = "DataContext"; 
    private readonly IHttpContextAccessor accessor; 

    public HttpDataContextStorageContainer(IHttpContextAccessor accessor) { 
     this.accessor = accessor; 
    } 

    public T GetDataContext() { 
     var current = accessor.HttpContext; 
     T objectContext = null; 
     if (current.Items.ContainsKey(DataContextKey)) { 
      objectContext = (T)current.Items[DataContextKey]; 
     } 
     return objectContext; 
    } 

    public void Clear() { 
     var current = accessor.HttpContext; 
     if (current.Items.ContainsKey(DataContextKey)) { 
      current.Items[DataContextKey] = null; 
     } 
    } 

    public void Store(T objectContext) { 
     var current = accessor.HttpContext; 
     if (current.Items.ContainsKey(DataContextKey)) { 
      current.Items[DataContextKey] = objectContext; 
     } else { 
      current.Items.Add(DataContextKey, objectContext); 
     } 
    } 
} 

IHttpContextAccessor 및 해당 구현이 서비스 컨테이너에 등록되어 있는지 확인하십시오. 더 이상 기본적으로 추가되지 않습니다.

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();