2010-04-28 21 views
14

Me preguntaba cómo podría enlazar el IPrincipal a HttpContext.Current.User en Asp.net Mvc con Ninject.Asp.net Mvc: Ninject - IPrincipal

saludos Friendly,

Pickels

Editar:

No es seguro si importa pero yo uso mi propia clase CustomPrincipal.

Respuesta

27

Usted puede hacer esto sin la necesidad de un proveedor en su NinjectModule:

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

Nota, que incluye .InRequestScope() para asegurar que el valor del método se almacena en caché una vez por petición HTTP. Yo recomendaría hacerlo incluso si usa el mecanismo del proveedor.

+0

Wow gracias, eso es un gran consejo. – Pickels

+0

¡No hay problema, espero que ayude! –

2

que lo tengo:

public class PrincipalProvider : IProvider 
{ 
    public object Create(IContext context) 
    { 
     return HttpContext.Current.User; 
    } 

    public System.Type Type 
    { 
     get { return typeof(CustomPrincipal); } 
    } 
} 

Y en mi NinjectModule yo:

Bind<IPrincipal>().ToProvider<PrincipalProvider>(); 

Si esto es incorrecto o no completa por favor hágamelo saber y voy a ajustar/eliminar.

+0

¿es posible persistir el proveedor de IP sobre diferentes capas, incluidas las que no hacen referencia a la web? – Haroon

Cuestiones relacionadas