【问题标题】:Dependency Injection Lifecycles依赖注入生命周期
【发布时间】:2009-04-08 15:35:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: dependency-injection


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-07
        • 2017-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        相关资源
        最近更新 更多