依赖注入与使用 new 实例化

问题描述 投票:0回答:1

我基本上想知道使用构造函数依赖注入和在构造函数中实例化对象之间的主要区别。

例如:

// Creating instance in the constructor
public Class MyService
{
    private Foo _foo;
    
    MyService()
    {
        _foo = new Foo();
    }
}


// Injecting in the constructor
public Class MyService
{
     private Foo _foo;
   
     MyService(Foo _foo)
     {
          _foo = _foo;
     }
}

现在,据我读过的文章/博客,上面的代码片段说存在紧密耦合,而在 DI 版本中存在低耦合,现在我知道耦合的概念,但我无法理解以下示例提供。

我想到的另一个区别是生命周期的区别...... 但我需要有人向我澄清这一点。另外,如果我在 DI 时不使用接口,我真的能获得依赖注入的好处吗?

c# .net
1个回答
0
投票

编程中有一套规则,称为“SOLID”。如果遵循这些规则,您的代码可能会具有更好的可测试性、可维护性和可扩展性。

SOLID

中的D代表Dependency Inversion。简而言之:


最好从类外部控制所有依赖项,因为当您在类内部生成它时,您无法更改它(用于单元测试或仅使用其他实现)
  • 那么编写单元测试就更容易(甚至可能)
  • 使用接口时,您只需更改 DI 框架中注册的实现即可更改实现,而无需更改类中的任何代码
总结

始终使用依赖注入通过接口进行更好的单元测试 而不是一个具体的类以获得更好的可扩展性。

© www.soinside.com 2019 - 2024. All rights reserved.