2010-04-28 4 views
14

Ich fragte mich, wie ich das IPrincipal an HttpContext.Current.User in Asp.net Mvc mit Ninject binden könnte.Asp.net Mvc: Ninject - IPrincipal

Freundliche Grüße,

Pickel

Edit:

Nicht sicher, ob es wichtig ist, aber ich meine eigene Custom Klasse.

Antwort

27

Sie können dies tun, ohne die Notwendigkeit für einen Anbieter in Ihrem NinjectModule:

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

Hinweis, ich .InRequestScope(), dass der Wert des Verfahrens zu gewährleisten, enthalten einmal pro HTTP-Anforderung zwischengespeichert wird. Ich würde dies auch dann empfehlen, wenn Sie den Provider-Mechanismus verwenden.

+0

Wow danke, das ist ein toller Tipp. – Pickels

+0

Kein Problem, hoffe es hilft! –

2

denken, dass ich es bekam:

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

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

Und in meinem NinjectModule ich tun:

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

Wenn dies falsch ist oder nicht füllen Sie bitte lassen Sie mich wissen und ich werde einstellen/löschen.

+0

Ist es möglich, den IProvider über verschiedene Layer hinweg zu speichern, einschließlich derer, die nicht auf das Web verweisen? – Haroon