代码之家  ›  专栏  ›  技术社区  ›  PhilHoy

依赖注入生命周期

  •  0
  • PhilHoy  · 技术社区  · 17 年前

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

    如果我允许容器在我第一次获得单例时注入请求范围的服务,那么对于当前请求可以,但在任何后续请求中都可以处理。

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

    2 回复  |  直到 17 年前
        1
  •  1
  •   Mauricio Scheffer    17 年前

    我不建议在您的单例服务中注入容器本身。而是:

    • 在工厂后面抽象请求范围服务的创建,并注入工厂,或者
    • 更改singleton的作用域并使其成为请求作用域。除非服务的实例化很昂贵,否则这不应该是一个问题。
        2
  •  0
  •   Michael Meadows    17 年前

    我会问你的目标是否绝对是一个单身汉。如果它不 必须是单身汉 ,然后不要让它成为一个单例,而是依靠容器来构建它。您遇到的问题是,依赖注入依赖于控制反转,而单例通常是自己构造的。

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

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

    推荐文章