Service 将应用程序中的所有类连接在一起

Service 将应用程序中的所有类连接在一起,service,dependency-injection,architecture,service-locator,Service,Dependency Injection,Architecture,Service Locator,我正在构建一个应用程序,但很难将所有的类连接在一起 我已经阅读了DI容器、服务定位器和注册表模式,我想我希望其中一个能够容纳我的所有对象。我知道它们之间有一些关键的区别,但在这一点上我并不关心,我感兴趣的是关于它们如何在内部工作的一些非常具体的东西 如果我提供一个基本的例子,希望我能说明我所面临的问题 所以我有我的容器对象: container = new Container() 我的容器有两个函数,get(key)和set(key,object) 现在我有3个类要存储在我的容器中,我为每个类

我正在构建一个应用程序,但很难将所有的类连接在一起

我已经阅读了DI容器、服务定位器和注册表模式,我想我希望其中一个能够容纳我的所有对象。我知道它们之间有一些关键的区别,但在这一点上我并不关心,我感兴趣的是关于它们如何在内部工作的一些非常具体的东西

如果我提供一个基本的例子,希望我能说明我所面临的问题

所以我有我的容器对象:

container = new Container()
我的容器有两个函数,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容器依赖于一个尚未创建的类,而该类也依赖于它试图创建的类,该怎么办?它将到达未创建的依赖项,尝试创建该依赖项,但是该类也对它最初尝试创建的类具有依赖项。如何解决此问题?

为什么要将容器注入对象?如果Class1需要Class2和Class3,那么它应该在构造函数中将它们指定为参数。如果Class1需要Class2,而Class2需要Class1,我如何将相同的对象传递给这两个类?当Class1试图创建自己时,我无法传递Class2的对象,因为它还没有被创建,如果忽略容器,这说明了我试图解决的相同问题,所以你有一个循环依赖?看看这个:为什么问题是“将应用程序中的所有类连接在一起”?它让人困惑,看起来像是创造了一个大的class@YacoubMassad是的,我想就是这样,我会调查的谢谢