MVC3 + Ninject:如何正确注入用户IPrincipal?

7
我看到了两个将用户IPrincipal注入的例子:
方法1:
kernel.Bind<IPrincipal>()
   .ToMethod(context => context.Kernel.Get<RequestContext>().HttpContext.User)
   .InRequestScope();

方法二:
kernel.Bind<IPrincipal>()
  .ToMethod(context => HttpContext.Current.User)
  .InRequestScope();

这两者有什么不同吗?有一个更受欢迎吗?

我该如何使用Autofac实现上述功能? - user437329
找到了我的答案 https://dev59.com/503Sa4cB1Zd3GeqPx8Jm - user437329
你需要使用Ninject.Web.Common来获取InRequestScope扩展方法。 - Simon_Weaver
当我尝试执行这些方法时,方法1会抛出空异常,而方法2会给我一个空的IPrincipal,有任何想法为什么它不能正常工作? - GBreen12
1个回答

7
这两种方法是相同的。它们都将返回当前HTTP请求的HttpContext对象。

如果是这种情况,我显然会选择更简洁的选项。你知道为什么在方法1中要使用"context.Kernel.Get"吗? - Shawn
1
如果您使用的是另一种ContextProvider上下文类型,则需要第一个示例。由于您全局使用的是System.Web中可用的HttpContext提供程序,因此不需要第一个示例。 - Jeff Reddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接