OOP:具有依赖项注入的可重用类

时间:2018-07-19 16:06:39

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

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

我正在构建一个队列使用者,该使用者从某个消息系统检索数据并将该消息传递给处理程序函数进行处理。我还有一个配置对象,其中装有队列名称和空闲超时之类的内容。

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

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. 提前初始化对象并将它们绑定为常量值。

恒定值似乎是非常错误的,因为将任何东西注入到消费者中都比较困难(如记录器),而工厂似乎混淆了类并可能使作用域不清楚(瞬态/单个)。

我的问题:

  • 是否有最正确的方法来处理此问题?看起来像什么?
  • 有关该主题的哪些阅读材料很好?
  • 我刚刚使它复杂化了吗?

谢谢您的输入!

1 个答案:

答案 0 :(得分:0)

道歉。我撤回了先前的答复,认为不适用。如果您对依赖项注入容器还不熟悉,那么本文(针对PHP)可能会引发一些想法,以非常清晰的方式涵盖它们的需求,使用和配置。

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

如果PHP不是您的本事,或者仍然不符合要求,请添加新注释。