IOC容器是否支持组合而不使用服务定位器模式?

时间:2017-11-08 11:57:03

标签: c# inversion-of-control castle-windsor

有三种面向对象的关系类型,即聚合,组合和关联,如下所述: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反模式。如何在不使用服务定位器模式的情况下使用合成?

1 个答案:

答案 0 :(得分:1)

如果您发现自己正在使用服务定位器模式,那么您可以对其进行质询,但它有它的位置,如果需要,可以使用。

您可能稍微关注的一件事是IoC如何注入。 IoC可以执行构造函数,属性和方法注入,因此您的关联示例仍然可以是依赖注入。

如果对象没有提供任何真实逻辑,那么没有IoC的组合就可以了。如果你想要写入你的课程只是一个DTO,那么你无论如何都不需要注入它。