7

Tutti,Unity Lifetime Managers & EF Contesto Dati -> Best Practice

C'è stato un sacco di post su Unity gestori vita, ma devo ancora trovare qualcuno affermare una buona regola per "in questi casi dovresti sempre usare X ". Lasciatemi descrivere la mia applicazione, ho un'applicazione Web ASP.NET MVC 4. Ho una soluzione di Visual Studio contenente 3 progetti, il mio progetto "Core" che contiene tutti i miei materiali EF, un progetto di test e il MVC Web Project. Sto usando l'Unità per l'iniezione di dipendenza e hanno il seguente codice in questo momento:

// Context 
container.RegisterType<IDatabaseFactory, DatabaseFactory>(
    new ContainerControlledLifetimeManager(); 
container.RegisterType<UnitOfWork>(
    new ContainerControlledLifetimeManager()); 

Tuttavia, sto notando che il mio contesto non viene ricreata con ogni nuova richiesta web che è quello che penso che vorrei (mi permetta so se ho torto in quell'ipotesi). Sto avendo difficoltà a analizzare tutte le informazioni dai siti elencati di seguito e ho letto su un sacco di persone che creano la loro classe chiamata PerHttpRequestLifetimeManager per gestire questo.

Quale è veramente la migliore pratica qui?

  1. gestori Lifetime comprensione da parte di Microsoft Developer Network - http://msdn.microsoft.com/en-us/library/ff660872(v=PandP.20).aspx
  2. MVC DI & unità con Lifetime Manager tramite CodeProject - http://www.codeproject.com/Articles/424743/MVC-DI-Unity-with-Lifetime-Manager
  3. ASP.NET MVC Suggerimento: Dependency Injection con Unity Application Block via Blog di Shiju Varghese - http://weblogs.asp.net/shijuvarghese/archive/2008/10/24/asp-net-mvc-tip-dependency-injection-with-unity-application-block.aspx
  4. MVC, EF - Istanza singleton DataContext Richiesta-Per-Web in Unity tramite Overflow dello stack - MVC, EF - DataContext singleton instance Per-Web-Request in Unity
  5. Inject same DataContex t istanza su più tipi con Unity tramite Stack Overflow - Inject same DataContext instance across several types with Unity
+0

Correlato: http://stackoverflow.com/questions/10585478/one-dbcontext-per-web-request-why. – Steven

risposta

6

Sì, solitamente si desidera un DbContext per richiesta.

Un PerHttpRequestLifetimeManager o contenitore figlio creato su ogni richiesta sono i modi tipici in cui viene gestito.

L'ultima versione di Unity introduce il Unity bootstrapper for ASP.NET MVC che ha un nuovo gestore della durata integrato: PerRequestLifetimeManager.

Ulteriori informazioni sono disponibili nel capitolo 3, Developer's Guide to Dependency Injection Using Unity, Dependency Injection with Unity.

+2

Hey Randy! Una risposta un po 'vecchia ma il mio problema è in realtà collegato a questo. Sto usando 'PerRequestLifetimeManager' per registrare il mio contesto in Unity:' container.RegisterType (nuovo PerRequestLifetimeManager(), nuovo InjectionConstructor()); '- ma DbContext non è mai disposto in base alle richieste. Ho incluso anche questa riga nel metodo 'RegisterTypes':' DynamicModuleUtility.RegisterModule (typeof (UnityPerRequestHttpModule)); 'ma quando lo faccio, DbContext è disposto prima della fine della richiesta. Qualche idea? –