HttpContextProvider
Nasz obiekt będzie dziedziczył po klasie IHttpContextProvider. Będzie on posiadał podstawowe zmienna które pozwolą nam na dostanie się do wszystkich parametrów aktualnego HttpContextu. Obiekt bedzie wyglądał tak:
public class HttpContextProvider : IHttpContextProvider
{
public System.Web.HttpContextBase Context
{
get { return new HttpContextWrapper(HttpContext.Current); }
}
public System.Web.HttpRequestBase Request
{
get { return Context.Request; }
}
public System.Web.HttpResponseBase Response
{
get { return Context.Response; }
}
public System.Collections.Specialized.NameValueCollection FormOrQueryString
{
get
{
if (Request.RequestType == "POST")
{
return Request.Form;
}
return Request.QueryString;
}
}
}
Generalnie nic specjalnie trudnego dziwnego w tym obiekcie. Jedyny co może wzbudzić ciekawość to tajemniczy klasa HttpContextWrapper z biblioteki System.Web. Ta klasa dziedziczy po HttpContextBase i pozwala na dostanie się do funkcjonalności aktualnego kontekstu. Dzięki takiemu rozwiązaniu mamy łatwy dostęp do HttpContextu z kontenera IoC jak i również ułatwia nam to testy ponieważ jak większość z was wie stworzenie fałszywego kontekstu jest dosyć nieprzyjemnym zadaniem.Session Manager
Wszystkie powyższe wypociny były związane z tym ze chciałem stworzyć obiekt do zarządzania sesją użytkownika. Główne rozwiązanie które chciałem dodać silnie typowana obsługa sesji. Klasa sessionManagera wygląda tak:
public class SessionManager : ISessionManager
{
private IHttpContextProvider _httpContextProvider;
public SessionManager(IHttpContextProvider provider)
{
_httpContextProvider = provider;
}
public void Set<T>(string name, T value)
{
_httpContextProvider.Context.Session.Add(name, value);
}
public T Get<T>(string name)
{
return (T)_httpContextProvider.Context.Session[name];
}
public T TryGet<T>(string name)
{
try
{
return (T)_httpContextProvider.Context.Session[name];
}
catch (NullReferenceException e)
{
return default(T);
}
}
public void Abandon()
{
_httpContextProvider.Context.Session.Abandon();
}
}
Klasa posiada metody podstawowe do pobierania i ustawiania wartości w sesji jak i również porzucania sesji. Oprócz tego dodałem metodę TryGet która pobiera wartość z sesji natomiast gdy nie istnieje to zwraca standardową wartość dla danego typu. Podczas zwykłego pobierania metoda Get wyrzuci wyjątek NullReferenceException co czasami jest niepożądane. Jest to coś podobnego jak mamy w słowniku. Natomiast niestety kolekcja sesji nie jest słownikiem. To tyle na dziś.

Brak komentarzy:
Prześlij komentarz