有三种面向对象的关系类型,即聚合,组合和关联,如下所述:What is the difference between association, aggregation and composition?。
IOC通过允许您执行此操作来支持组合:
agm-map {
height: 100vh;
}
agm-marker {
position: fixed;
left: 50vw;
top: 50vh;
z-index: 9999;
}
我认为上面的代码是聚合的一个例子,因为MyClass不负责MyClass2的生命周期。
这是一个关联的例子,即MyClass2传递给方法(而不是注入到类中):
public class MyClass
{
MyClass2 MyClass2;
public MyClass(MyClass2 myClass2)
{
MyClass2 = myClass2;
}
}
我可以为Composition做这样的事情:
public void MyMethod(MyClass2 myClass2)
{
//Do something
}
但是,我相信Composition示例使用Service Locator反模式。如何在不使用服务定位器模式的情况下使用合成?
答案 0 :(得分:1)
如果您发现自己正在使用服务定位器模式,那么您可以对其进行质询,但它有它的位置,如果需要,可以使用。
您可能稍微关注的一件事是IoC如何注入。 IoC可以执行构造函数,属性和方法注入,因此您的关联示例仍然可以是依赖注入。
如果对象没有提供任何真实逻辑,那么没有IoC的组合就可以了。如果你想要写入你的课程只是一个DTO,那么你无论如何都不需要注入它。