2011-10-24 12 views
7

Ho visto i due esempio seguente per iniettare l'Utente IPrincipal:MVC3 + Ninject: Qual è il modo corretto di iniettare l'IPrincipal dell'utente?

Metodo 1:

kernel.Bind<IPrincipal>() 
    .ToMethod(context => context.Kernel.Get<RequestContext>().HttpContext.User) 
    .InRequestScope(); 

Metodo 2:

kernel.Bind<IPrincipal>() 
    .ToMethod(context => HttpContext.Current.User) 
    .InRequestScope(); 

C'è qualche differenza tra i due? È uno preferito?

+0

Come posso eseguire quanto sopra utilizzando Autofac? – lafama

+0

Trovato la mia risposta http://stackoverflow.com/questions/2824649/passing-asp-net-user-by-dependency-injection – lafama

+0

è necessario utilizzare Ninject.Web.Common per il metodo di estensione 'InRequestScope' –

risposta

5

I due metodi sono identici. Entrambi restituiranno l'obetto HttpContext per la richiesta HTTP corrente.

+0

Se è così, ovviamente sceglierò l'opzione più concisa. Qualche idea sul perché tutto il problema di "context.Kernel.Get" nel Metodo 1? – Shawn

+0

Il primo esempio sarebbe necessario se il contesto che stavi utilizzando fosse di un altro tipo di ContextProvider. Dal momento che si utilizza il provider HttpContext disponibile globalmente tramite System.Web, non è necessario il primo. –

+0

Eccellente. Grazie. – Shawn