Get/Set HttpContext Session Méthodes de BaseController vs Moqueur HttpContextBase de créer des méthodes Get/Set
J'ai créé Get/Set HttpContext Session Méthodes de BaseController classe et aussi se Moquaient de HttpContextBase et créé des méthodes Get/Set.
Qui est la meilleure façon de l'utiliser.
HomeController : BaseController
{
var value1 = GetDataFromSession("key1")
SetDataInSession("key2",(object)"key2Value");
Or
var value2 = SessionWrapper.GetFromSession("key3");
GetFromSession.SetDataInSession("key4",(object)"key4Value");
}
public class BaseController : Controller
{
public T GetDataFromSession<T>(string key)
{
return (T) HttpContext.Session[key];
}
public void SetDataInSession(string key, object value)
{
HttpContext.Session[key] = value;
}
}
Ou
public class BaseController : Controller
{
public ISessionWrapper SessionWrapper { get; set; }
public BaseController()
{
SessionWrapper = new HttpContextSessionWrapper();
}
}
public interface ISessionWrapper
{
T GetFromSession<T>(string key);
void SetInSession(string key, object value);
}
public class HttpContextSessionWrapper : ISessionWrapper
{
public T GetFromSession<T>(string key)
{
return (T) HttpContext.Current.Session[key];
}
public void SetInSession(string key, object value)
{
HttpContext.Current.Session[key] = value;
}
}
Vous devez vous connecter pour publier un commentaire.
Le second semble la meilleure. Bien que je n'aurais sans doute écrire ces deux méthodes d'extension pour le HttpSessionStateBase au lieu de les mettre dans une base de contrôleur. Comme ceci:
et puis à l'intérieur de l'contrôleurs, ou des aides, ou quelque chose qui a une instance de
HttpSessionStateBase
l'utiliser:Séance d'écriture wrappers est inutile dans ASP.NET MVC comme le
HttpSessionStateBase
fournies par le framework est déjà une classe abstraite qui pourrait facilement être moqué dans les tests unitaires.Juste une petite correction pour le SetDataInSession méthode du dernier post. À mon avis, c'est une solution élégante! Grâce Darin Dimitrov.
D'abord créer cette classe, et après n'oubliez pas de consulter son espace de noms dans la classe du Contrôleur qui va appeler cette méthode.
Lors de l'obtention de la valeur de session:
string value = Session.GetDataFromSession<string>("key1");
Doivent être d'un type compatible avec l'objet persisté dans la session.