2014-11-25 9 views
16

Nella classe Startup, è possibile aggiungere servizi nel metodo ConfigureServices. Quando voglio ottenere un determinato servizio, ci sono 2 proprietà nell'istanza HttpContext, ApplicationServices e RequestServices. Mi chiedo la differenza tra loro e come usarli correttamente.Qual è la differenza tra ApplicationServices e RequestServices in Microsoft.AspNet.Http.HttpContext?

Modifica # 1: Per esempio, in classe di avvio:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddSingleton<ICache, InProcessCache>(); // Line 1 
    services.AddSingleton<ISystemClientResolver>(SystemClientResolver.CreateInstance); // Line 2 
    services.AddScoped<SystemClient>(); // Line 3 
    services.AddRvcBusiness(); // Line 4 
    services.AddMvc(); // Line 5 
} 

Se io non chiamo app.UseRequestServices() in Configure(IApplicationBuilder app) metodo, posso ottenere SystemClient esempio Context.ApplicationServices.GetService(typeof(SystemClient)), ma non è per ogni singolo richiesta, sembra single e Context.RequestServices è nullo. Una volta che io chiamo app.UseRequestServices() come questo:

public void Configure(IApplicationBuilder app) 
{ 
    app.UseRequestServices(); 
    // ... 
} 

Context.RequestServices non è nulla e posso ottenere SystemClient esempio Context.RequestServices.GetService(typeof(SystemClient)) e l'istanza è base per-richiesta.

+1

Nota: 'ApplicationServices' non fa più parte di' HttpContext'. –

risposta

10

ApplicationServices sono per tutta la durata della tua app, mentre RequestServices sono interessati da una particolare richiesta (HttpContext). Inoltre, RequestServices può essere nullo. Uno speciale middleware RequestContainer è quello che inizializza RequestServices:

app.UseRequestServices() userà il risultato di ConfigureServices come RequestServices

app.UseServices() e le sue sovraccarichi consentono di specificare/modificare i servizi di richiesta

anche se si utilizza il routing/o middleware di autenticazione di sicurezza, assicureranno automaticamente che anche i RequestService vengano popolati, poiché si affidano ai servizi di ambito richiesto stessi.