2017-12-23 7 views
1

Ich möchte einige Codes auf ASP.NET Core 2 aktualisieren. Ich weiß, dass die HttpContext.Current von ASP.NET Core 2 entfernt wird und IHttpContextAccessor verwenden muss.eine Alternative für HttpContext.Current.Items.Contains (DataContextKey) in ASP.NET Core 2

Aber ich weiß nicht, wie soll ich diesen Code wechseln:

HttpContext.Current.Items.Contains (DataContextKey)

Wie kann ich es tun?

Der vollständige Code:

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

Antwort

1

Inject IHttpContextAccessor und den aktuellen HttpContext über das zuzugreifen. Der Rest sollte einfach genug sein, um zu refaktorieren.

Zum Beispiel.

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

nur sicherstellen, dass IHttpContextAccessor und deren Umsetzung mit dem Container-Dienste registriert ist. Es wird standardmäßig nicht mehr hinzugefügt.

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();