【发布时间】: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 个选项。
- 创建工厂为我创建实例。
- 提前初始化对象并将它们绑定为常量值。
常量值似乎非常错误,因为向消费者注入任何东西都更加困难(如记录器),而工厂似乎混淆了类并且可能使范围不清楚(瞬态/单例)。
我的问题:
- 有没有最正确的方法来处理这个问题?这看起来像什么?
- 关于这个主题有哪些好的阅读材料?
- 我是不是太复杂了?
感谢您的意见!
【问题讨论】:
标签: java typescript oop design-patterns dependency-injection