我正在构建一个应用程序,但我无法一起加入所有课程。
我已经阅读了DI容器,服务定位器和注册表模式,我想我希望其中一个容纳我的所有对象。我知道每个人之间存在关键的具体差异,但在这一点上我并不关心这一点,我对他们如何在内部工作非常具体的事情感兴趣。
如果我提供一个基本的例子希望我可以说明我遇到的问题..
所以我有我的容器对象:
container = new Container()
我的容器有2个函数,get(key)和set(key,object)。
所以现在我想在我的容器中存储3个类,并为每个类提供一个容器对象,这样它们就可以相互连接。
obj1 = new Class1(container)
obj2 = new Class2(container)
obj3 = new Class3(container)
之后我在容器中设置对象:
container.set('obj1', obj1)
container.set('obj2', obj2)
container.set('obj3', obj3)
我所拥有的问题是在我的构造函数中我想要做的是为我想要的每个类设置一个变量,但问题是,当每个构造函数都没有在容器中设置对象运行,所以没有返回任何东西。它看起来像这样:
Class1{
constructor(container)
{
// Both of these will return null becuase as the constructor is run there's no key assigned to obj2/3
obj2 = container.get('obj2');
obj3 = container.get('obj3');
}
}
我想要的东西比拿着容器对象更清洁,并且每次我想要其中一个对象时都要直接访问容器。我想在构造函数中设置所有内容。
当我考虑DI容器如何工作时,同样的问题出现了。我知道DI容器只有在它尚不存在的情况下才创建一个对象,但如果DI容器依赖于一个尚未创建的类依赖于它试图创建的类,该怎么办?它会达到未创建的依赖关系,尝试创建它,但是那个类也依赖于它最初尝试创建的类。你是如何解决这个问题的?