2

我一直在网上寻找一段时间,但无法找到确切的答案。好吧,他们说为类注入抽象(接口或其他),而不是让它创建它需要的实例,或者不是传递实现类型。松耦合和返回对象

class Foo 
{ 
    private IBar _bar; 

    public Foo(Ibar bar) 
    { 
     _bar = bar; 
    } 
} 

虽然我不完全理解上面是如何合理地松散耦合,但我在这一点上的问题是关于别的东西。也就是说,如果一个方法必须返回某个事物的实例呢?例如,如何可以松散耦合:

class Foo 
{ 
    public IBar GetMeSomething() 
    { 
     return new Bar(); // dependency here 
    } 
} 

我只是想知道如何解决上面的依赖关系吧?任何有经验的程序员请帮助我理解这一点。或者有人可能会建议一些文章全面讨论消除/减少类型相互依赖关系的所有场景。

回答

1

当一个类需要知道关于你的程序的“Something”时,你可以通过在你的构造函数中传递另一个类的实例来解决这个问题。

如果您在构造函数中只接受接口而不是具体的类,那么您以后可以轻松地更改实现。

如果你必须在运行时创建对象,你需要工厂,你的类Foo在你的情况下是一个IBarFactory(因为它实例化IBars)。

任何IoC框架(工厂也在构造函数中传递)很容易解决构造函数通过接口的依赖关系,而工厂本身的实现允许直接或通过IoC框架实例化对象,因为这是类的响应性。

使用IoC容器和依赖注入并不会使魔术发生looscoupling,但您仍然需要在SOLID原则的基础上对类进行建模,但是在使用SOLID原则时IoC容器和DI有很大的帮助。