2009-01-24 10 views
5

Ich füge einige Tests zu einer Klasse hinzu, die HttpContext.Current.Session intern verwendet, und wir portieren zu ASP.NET MVC. Meine Klasse sieht wie folgt aus:Testen einer Klasse mit HttpContext.Current.Session in ASP.NET MVC

class Foo 
{ 
    public void foo() 
    { 
     HttpContext.Current.Session["foo"] = "foo"; 
    } 
} 

Ich dachte, es wie folgt zu ändern:

class Foo 
{ 
    IHttpSessionState session; 

    public Foo() : this(HttpContext.Current.Session) {} 

    public Foo(IHttpSessionState session) 
    { 
     m_session = session; 
    } 

    public void foo() 
    { 
     m_session["foo"] = "foo"; 
    } 
} 

Das Problem mit dem Standard-Konstruktor ist. Ich kann die alten Klassen nicht weitergeben, da sie die neuen ASP.NET MVC-Schnittstellen nicht implementieren.

Gibt es sowieso die Instanzen, die IHttpSessionState im Standardkonstruktor implementieren?

Dank

Antwort

5

Try this, verwendet es die IHttpSessionState Wrapper, der die MVC-Framework verwendet.

class Foo 
{ 
    // member variable set by constructor 
    IHttpSessionState m_session; 

    // if no session is passed it attempts to create a new session state wrapper from the current session 
    public Foo() : this(new HttpSessionStateWrapper(HttpContext.Current.Session)) {} 

    public Foo(IHttpSessionState session) 
    { 
     m_session = session; 
    } 

    public void foo() 
    { 
     m_session["foo"] = "foo"; 
    } 
}