2011-11-23 5 views
9

Per eseguire il debug dell'applicazione ASP.NET, ho creato una classe denominata MessageHandling.cs. A questo punto è un modello singleton, ma voglio che sia un'istanza per richiesta.Singola istanza di una classe per richiesta HTTP

La mia classe mssqlDb riempie la classe MessagesHandling con messaggi come "Db connected", "Dati inseriti" e cose del genere. Dopo che tutti gli eventi della pagina apsx vengono elaborati, la classe MessageHandling viene letta da createFile.apsx.cs nell'evento Page_LoadComplete(). Tutti gli errori e i messaggi saranno mostrati all'utente.

A questo punto il sistema funziona per il debug. Il problema a questo punto è che MessageHandling non viene svuotato dopo che la richiesta è stata inviata e gli errori sono mostrati anche sul secondo browser senza fare nulla. Voglio anche essere in grado di utilizzare questo sistema per mostrare messaggi agli utenti finali come: "Blog creato".

La base del mio problema è il seguente:
Class A crea Class B
Class C legge Class B

Il Singleton non funziona perché non è per utente/sessione/richiesta. Quindi ho bisogno di un altro metodo.

+0

Dove istanziate per la prima volta il vostro singleton? –

+0

Il mssqlDb è il primo ad usarlo. Quindi questo è il posto in cui è iniziato. – h3rj4n

risposta

4

HttpContext.Current è l'oggetto HttpContext per la richiesta corrente. Ha una proprietà Items che è una IDictionary da object a object. Puoi mettere tutto ciò che ti piace lì e sarà legato alla richiesta corrente.

-1

È possibile controllare il costruttore del singleton per vedere se quell'oggetto esiste nella sessione? In caso contrario, crearlo e quindi restituirlo?

private Singleton() 
{ 
    // do whatever 
} 

public Singleton GetMySingleton() 
{ 
    if(HttpContext.Current.Items["MyCustomSingleton"] == null) 
     HttpContext.Current.Items["MyCustomSingleton"] = new Singleton(); 
    // 

    return (Singleton)HttpContext.Current.Items["MyCustomSingleton"]; 
} 
+0

Questo pezzo di codice si memorizzerà nella cache per sessione, non per richiesta. – Bertvan

+0

ya, mio ​​male. non ho visto quella parte – Miles