【问题标题】:OOP: Reusable classes with dependency injectionOOP:具有依赖注入的可重用类
【发布时间】:2018-07-19 16:06:39
【问题描述】:

我一直在努力理解在使用依赖注入容器时如何/在哪里初始化一个类。我很难找到要解释的词,所以我举个例子。

我正在构建一个队列消费者,它从某个消息系统检索数据并将该消息传递给处理函数进行处理。我还有一个配置对象,其中加载了队列名称和空闲超时等内容。

我从一个看起来像这样的构造函数开始:

constructor ( @inject("config") config: IConfig ) {
    this.queueName = config.getQueueName();
    this.prefetch = config.getPrefetch();
    this.idleTimeout = config.idleTimeout();
}

我不喜欢这个。我知道这是不正确的。该类不可重用,至少,不容易。这让我想到了这样的事情:

constructor ( 
    private queueName: string, 
    private prefetch: number, 
    private idleTimeout: number 
) { }

我对此感觉更舒服,我可以重用这个类,而且它更灵活。但现在我不能直接注入它。每次我尝试直接注入一个类时似乎都是这种情况(直接,我的意思是没有工厂或提供者之类的东西)

此时我发现自己有 2 个选项。

  1. 创建工厂为我创建实例。
  2. 提前初始化对象并将它们绑定为常量值。

常量值似乎非常错误,因为向消费者注入任何东西都更加困难(如记录器),而工厂似乎混淆了类并且可能使范围不清楚(瞬态/单例)。

我的问题:

  • 有没有最正确的方法来处理这个问题?这看起来像什么?
  • 关于这个主题有哪些好的阅读材料?
  • 我是不是太复杂了?

感谢您的意见!

【问题讨论】:

    标签: java typescript oop design-patterns dependency-injection


    【解决方案1】:

    抱歉。我撤回了我之前的答复,认为不适用。如果您对依赖注入容器相当陌生,这篇文章(专注于 PHP)可能会引发一些想法,以非常清晰的方式涵盖它们的需求、使用和配置。

    http://fabien.potencier.org/do-you-need-a-dependency-injection-container.html

    如果 PHP 不是您的菜,或者仍然没有达到目标,请添加新评论。

    【讨论】:

    • 谢谢@bcperth。这很有帮助。最后,我使用我的容器“onActivate”方法做了类似的事情,我在将对象注入目标之前配置了该方法。我认为您链接的文章很好地解释了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2012-03-16
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多