2011-10-24 12 views
7

he visto los dos ejemplos siguientes para inyectar el IPrincipal usuario:MVC3 + Ninject: ¿Cuál es la forma correcta de inyectar el usuario IPrincipal?

Método 1:

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

Método 2:

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

¿Hay alguna diferencia entre los dos? ¿Se prefiere uno?

+0

¿Cómo puedo lograr lo anterior utilizando Autofac? – lafama

+0

Encontré mi respuesta http://stackoverflow.com/questions/2824649/passing-asp-net-user-by-dependency-injection – lafama

+0

Necesitarás usar Ninject.Web.Common para el método de extensión 'InRequestScope' –

Respuesta

5

Los dos métodos son idénticos. Ambos van a devolver el HttpContext obect para la solicitud HTTP actual.

+0

Si ese es el caso, obviamente voy a elegir la opción más concisa. ¿Alguna idea de por qué todo el problema de "context.Kernel.Get" en el Método 1? – Shawn

+0

El primer ejemplo sería necesario si el contexto que estaba utilizando era de otro tipo de ContextProvider. Dado que utiliza el proveedor de HttpContext disponible globalmente a través de System.Web, no es necesario el primero. –

+0

Excelente. Gracias. – Shawn

Cuestiones relacionadas