Ecco la mia versione di una soluzione per questo problema. Si noti che io uso anche un iniezione di dipendenza, così, l'unica differenza è che l'oggetto "sessione" si accede ha gettato un Singleton
private iSession _Session;
private iSession InternalSession
{
get
{
if (_Session == null)
{
_Session = new SessionDecorator(this.Session);
}
return _Session;
}
}
Ecco la classe SessionDecorator, che utilizza un modello Decorator per avvolgere la sessione intorno un'interfaccia:
public class SessionDecorator : iSession
{
private HttpSessionStateBase _Session;
private const string SESSIONKEY1= "SESSIONKEY1";
private const string SESSIONKEY2= "SESSIONKEY2";
public SessionDecorator(HttpSessionStateBase session)
{
_Session = session;
}
int iSession.AValue
{
get
{
return _Session[SESSIONKEY1] == null ? 1 : Convert.ToInt32(_Session[SESSIONKEY1]);
}
set
{
_Session[SESSIONKEY1] = value;
}
}
int iSession.AnotherValue
{
get
{
return _Session[SESSIONKEY2] == null ? 0 : Convert.ToInt32(_Session[SESSIONKEY2]);
}
set
{
_Session[SESSIONKEY2] = value;
}
}
}`
Spero che questo aiuti :)
Grazie per la risposta. Sembra che ci siano alcuni framework di Iniezione delle dipendenze. Quale framework DI suggerisci? È necessario leggere articoli su DI? :) – xraminx
questo sembra eccessivamente complicato per ciò che il poster originale stava chiedendo. –
@xraminx: non confondere ciò che sto suggerendo con un framework DI. Sto parlando di usare DI, il modello, non un quadro. L'idea è di passare un'istanza della dipendenza alla classe piuttosto che crearne una o utilizzare un'istanza statica. Molto più facile da testare l'unità tramite derisione. – tvanfosson