Asp Web Api生命周期问题

时间:2015-01-15 10:39:26

标签: asp.net-web-api application-lifecycle

我正在使用web api 2

我有一个身份验证过滤器(实现IAuthenticationFilter),它检查令牌并在Thread和HttpContext上设置ClaimsPrinciple。一个这样的主张是userId

我使用Windsor进行依赖注入,使用此处描述的方法。 http://blog.ploeh.dk/2012/10/03/DependencyInjectioninASP.NETWebAPIwithCastleWindsor/

这将为我的控制器创建对象图,从而新建控制器具有的所有依赖项

问题是其中一个依赖关系中的一个构造函数进行了需要用户标识的调用

似乎这个(构造函数调用)在由身份验证过滤器

设置之前发生

我有什么选择?

1 个答案:

答案 0 :(得分:1)

当Web API需要控制器时,依赖注入用于创建它。这总是在执行管道之前发生。因此,您无法访问稍后设置的userid

至少有这些解决方案。

  • 在需要时解析依赖关系(即使用DI容器作为服务定位器)。 我不喜欢这个
  • lazy初始化依赖项(我不知道Castle Windsor是否可以这样做,但它看起来有可能:Lazy Loading using Windsor Castle不是那么糟糕
  • 更改该组件的实现,并在需要时接收userid参数,以便在您想要使用它时可用。 我更喜欢这个