2010-04-28 6 views
14

Je me demandais comment je pouvais lier l'IPrincipal à HttpContext.Current.User dans Asp.net Mvc avec Ninject.Asp.net Mvc: Ninject - IPrincipal

Amicalement,

Pickels

Edit:

Je ne sais pas si ça compte mais j'utiliser ma propre classe CustomPrincipal.

Répondre

27

Vous pouvez le faire sans avoir recours à un fournisseur dans votre NinjectModule:

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

Remarque, j'inclus .InRequestScope() pour veiller à ce que la valeur de la méthode est mise en mémoire cache une fois par requête HTTP. Je recommande de le faire même si vous utilisez le mécanisme du fournisseur.

+0

Wow merci, c'est un bon conseil. – Pickels

+0

Pas de problème, j'espère que ça aide! –

2

pense que je l'ai:

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

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

Et dans mon NinjectModule je fais:

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

Si cela est faux ou pas terminé s'il vous plaît laissez-moi savoir et je vais régler/supprimer.

+0

est-il possible de persister IProvider sur différentes couches, y compris celles qui ne référencent pas le web? – Haroon

Questions connexes