依赖注入生命周期

时间:2009-04-08 15:35:30

标签: dependency-injection

我有一个单一服务,它依赖于具有请求范围生命周期的服务。

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

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

2 个答案:

答案 0 :(得分:1)

我不建议在单件服务中注入容器本身。代替:

  • 在工厂后面抽象创建请求范围的服务,并注入工厂或
  • 更改单例的范围并使其成为请求范围。除非服务的实例化很昂贵,否则这不应成为问题。

答案 1 :(得分:0)

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

许多容器将对它们构造的对象的生命周期负责。如果是的话,您可以指示它只使用对象的单个实例。但是,如果我正确地阅读了您的问题,那么每个请求都需要一个新的对象实例,因为每个请求的状态(服务)都不同。

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