Il database verrà inserito in una classe base per i controller. Questa classe base dovrebbe estendere il controller e tutti i controller dovrebbero estendere la classe base. Ecco un piccolo esempio:
public class BaseController : Controller
{
private AuthServices _auth;
private LogHelper _log;
private Repository _repository;
/// <summary>
/// <see cref="AuthServices"/>
/// </summary>
protected AuthServices Authorization
{
get { return _auth ?? (_auth = new AuthServices()); }
}
/// <summary>
/// <see cref="LogHelper"/>
/// </summary>
protected LogHelper Log
{
get { return _log ?? (_log = new LogHelper()); }
}
/// <summary>
/// <see cref="Repository"/>
/// </summary>
protected Repository Repository
{
get { return _repository ?? (_repository = new Repository()); }
}
}
Si noti l'istanza lazy. Questo mi permette di entrare di nascosto prima di eseguire i test e impostare i miei campi privati con mock.
Per quanto riguarda la sessione, l'oggetto Utente può ancora essere salvato nella sessione proprio come in un'applicazione ASP.NET tradizionale. Quasi tutto è ancora in circolazione (Response, Cache, Session, ecc.), Ma alcuni di essi sono stati integrati con le classi di System.Web.Abstractions in modo che possano essere presi in giro per il test. Si comportano tutti allo stesso modo, anche se non dovresti usare alcuni di essi nel loro ruolo tradizionale (ad esempio, non Response.Redirect, restituisci un ActionResult come RedirectToRouteResult che esegue il tuo reindirizzamento).
Per quanto riguarda il ragionamento dietro le vostre domande ....
Non lo stress su una singola connessione db. A seconda dell'implementazione, potrebbe anche essere una cattiva idea, in quanto le richieste possono essere reciproche. Apri il tuo collegamento, usalo e disponilo/chiudilo quando hai finito.
Inoltre, uno dei più grandi cambiamenti apportati da MVC è il rifiuto del modello stateful che il tradizionale ASP.NET ha tentato di portare allo sviluppo web. Tutto questo quadro e il panorama non esistono più (non prestare attenzione all'uomo dietro la tenda). Meno lo stato si tiene sul meno complesso e più robusto è la tua applicazione web. Provalo, potrebbe piacerti.
"Notate l'istanza pigra, che mi permette di entrare di nascosto prima di eseguire test e impostare i miei campi privati con mock". Perché non usare IoC? –
Baby steps ...... Dovresti rispondere con un esempio di questo. – Will
Uso effettivamente il pool di connessioni. Comunque, grazie. Questo è quasi esattamente quello che stavo progettando, buono a sapere che sto seguendo abbastanza vicino alle migliori pratiche. –