Asp.net Mvc: Ninject - IPrincipal

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

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

Pickels

Edit:

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

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>();

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