2009-04-08 84 views
0

我有一个具有请求作用域生命周期的服务依赖项的单例服务。依赖注入生命周期

如果我允许容器在第一次获取单例时注入请求范围服务,那么当前请求将会罚款,但将在任何后续请求中处理。

这是否意味着我必须使用依赖容器在单例中创建请求范围的服务?

回答

1

我不会推荐在您的单件服务中注入容器本身。相反:

  • 抽象创作后厂您的请求范围的服务,并注入了工厂,或
  • 改变你的单身的范围,使其请求范围。除非服务的实例化代价高昂,否则这不应该成为问题。
0

我会问,如果你的对象绝对必须是单身人士。如果它不是必须是单身人士,那么不要让它成为单身人士并依靠你的容器来构建它。你遇到的问题是因为依赖注入依赖于控制的反转,而单例通常构造自己。

许多容器将负责它们构建的对象的生命周期。如果是你的,你可能会指示它只使用你的对象的一个​​实例。然而,如果我正确地阅读你的问题,你确实需要每个请求的对象的新实例,因为每个请求的状态(服务)是不同的。

总之,使用单身作为最后的手段,因为它会导致您现在遇到的问题类型。如果您被锁定到该模式,请考虑不注入服务,而是将其作为参数传递。如果您将其引入状态,则会遇到并发问题,即需要多个同时发生的请求需要不同的服务实例。