Asp.net mvc Asp.net Mvc:Ninject-IPrincipal

Asp.net mvc Asp.net Mvc:Ninject-IPrincipal,asp.net-mvc,inversion-of-control,ninject,iprincipal,Asp.net Mvc,Inversion Of Control,Ninject,Iprincipal,我想知道如何使用Ninject将IPrincipal绑定到Asp.net Mvc中的HttpContext.Current.User 友好的问候, 纠察队 编辑: 不确定这是否重要,但我使用自己的CustomPrincipal类。我想我得到了: public class PrincipalProvider : IProvider { public object Create(IContext context) { return HttpContext.Curren

我想知道如何使用Ninject将IPrincipal绑定到Asp.net Mvc中的HttpContext.Current.User

友好的问候,

纠察队

编辑:

不确定这是否重要,但我使用自己的CustomPrincipal类。

我想我得到了:

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

    public System.Type Type
    {
        get { return typeof(CustomPrincipal); }
    }
}
在我的模块中,我会:

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

如果这是错误的或不完整的,请让我知道,我会调整/删除。

您无需在
Ninject模块中提供程序即可执行此操作:

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

注意,我包括了
.InRequestScope()
,以确保每个HTTP请求都缓存一次该方法的值。即使您使用提供程序机制,我也建议您这样做。

是否可以在不同的层(包括不引用web的层)上持久化IProvider?