Asp.net Mvc: Ninject - IPrincipal

Мне было интересно, как я могу привязать IPrincipal к HttpContext.Current.User в Asp.net Mvc с помощью Ninject.

Дружественные приветствия,

Пикели

Редактировать:

Не уверен, что это важно, но я использую свой собственный класс CustomPrincipal.


person Pickels    schedule 28.04.2010    source источник


Ответы (2)


Вы можете сделать это без необходимости наличия провайдера в вашем NinjectModule:

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

Обратите внимание: я включил .InRequestScope(), чтобы значение метода кэшировалось один раз для каждого HTTP-запроса. Я бы рекомендовал сделать это, даже если вы используете механизм провайдера.

person Peter Meyer    schedule 28.04.2010

Думаю, я понял:

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

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

И в моем NinjectModule я делаю:

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

Если это неверно или неполно, дайте мне знать, и я исправлю / удалю.

person Pickels    schedule 28.04.2010
comment
Можно ли сохранить IProvider на разных уровнях, включая те, которые не ссылаются на Интернет? - person Haroon; 23.06.2011