Dependency injection 对象的松耦合和返回
我已经在互联网上寻找了一段时间,但没有找到确切的答案。好的,他们说将抽象(接口或其他东西)注入到类中,而不是让它创建所需的实例,或者传递实现类型Dependency injection 对象的松耦合和返回,dependency-injection,inversion-of-control,loose-coupling,Dependency Injection,Inversion Of Control,Loose Coupling,我已经在互联网上寻找了一段时间,但没有找到确切的答案。好的,他们说将抽象(接口或其他东西)注入到类中,而不是让它创建所需的实例,或者传递实现类型 class Foo { private IBar _bar; public Foo(Ibar bar) { _bar = bar; } } 虽然我不完全理解上面的内容是如何合理地松散耦合的,但我现在的问题是关于其他方面的。也就是说,如果一个方法必须返回某个对象的实例,该怎么办。例如,如何使以下内容松散
class Foo
{
private IBar _bar;
public Foo(Ibar bar)
{
_bar = bar;
}
}
虽然我不完全理解上面的内容是如何合理地松散耦合的,但我现在的问题是关于其他方面的。也就是说,如果一个方法必须返回某个对象的实例,该怎么办。例如,如何使以下内容松散耦合:
class Foo
{
public IBar GetMeSomething()
{
return new Bar(); // dependency here
}
}
我只是想知道如何解决上面对Bar的依赖?任何有经验的程序员请帮助我理解这一点。或者有人可以推荐一些文章,全面讨论消除/减少类型间依赖性的所有此类场景。当一个类需要了解有关程序的“某些信息”时,可以通过在构造函数中传递另一个类的实例来解决
如果您只接受构造函数中的接口,而不接受具体的类,那么以后就可以轻松地更改实现
如果您必须在运行时创建对象,您需要工厂,那么在您的例子中,类Foo是一个IBarFactory(因为它实例化了ibar)
通过接口在构造函数中的依赖关系很容易由任何IoC框架解决(工厂也在构造函数中传递),而工厂本身的实现允许直接或通过IoC框架实例化对象,因为这是类的责任
使用IoC容器和依赖项注入并不会使LooScoppling发生在magic中,您仍然需要使用坚实的原则建模类,但是当使用坚实的原则时,IoC容器和DI会有很大的帮助