【问题标题】:MVC3 + Ninject: What is the proper way to inject the User IPrincipal?MVC3 + Ninject:注入用户 IPrincipal 的正确方法是什么?
【发布时间】:2024-05-23 20:10:02
【问题描述】:

我看过下面两个注入 User IPrincipal 的例子:

方法一:

kernel.Bind<IPrincipal>()
   .ToMethod(context => context.Kernel.Get<RequestContext>().HttpContext.User)
   .InRequestScope();

方法二:

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

两者有区别吗?是首选吗?

【问题讨论】:

  • 如何使用 Autofac 完成上述操作?
  • 找到我的答案*.com/questions/2824649/…
  • 你需要使用 Ninject.Web.Common 作为InRequestScope 扩展方法
  • 当我尝试执行这些方法时,方法 1 抛出空异常,方法 2 给我一个空的 IPrincipal,知道为什么它不能正常工作吗?

标签: asp.net-mvc-3 dependency-injection ninject iprincipal


【解决方案1】:

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

【讨论】:

  • 如果是这样的话,我显然会选择更简洁的选项。知道为什么方法 1 中“context.Kernel.Get”的所有麻烦吗?
  • 如果您使用的上下文是另一种类型的 ContextProvider,则需要第一个示例。由于您使用通过 System.Web 全局可用的 HttpContext 提供程序,因此不需要第一个。