`
runfeel
  • 浏览: 943740 次
文章分类
社区版块
存档分类
最新评论

设计原则:我是如何使用“依赖注入”的

 
阅读更多

依赖注入的定义

控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI。

构造方法注入

代码示例

复制代码
1 public class Service
2 {
3     private readonly IDependService _dependService;
4 
5     public Service(IDependService dependService)
6     {
7         _dependService = dependService;
8     }   
9 }
复制代码

意图:非常强烈的依赖关系,缺少该依赖服务不能正常的履行期职责,运行时不能修改依赖对象(采用readonly声明)。

属性注入

代码示例

复制代码
 1 public class Service
 2 {
 3     private IDependService _dependService;
 4 
 5     public Service()
 6     {
 7         _dependService = new DefaultDependService();
 8     }
 9 
10     public IDependService DependService
11     {
12         set
13         {
14             _dependService = value;    
15         }
16     }
17 }
复制代码

意图:拥有默认的依赖关系,运行时可以修改依赖对象。

方法注入

代码示例

复制代码
1 public class Service
2 {
3     public void Do(IDependService dependService)
4     {
5         //调用依赖
6     }
7 }
复制代码

意图:没办法采用上边两种注入的场景,如:需要从数据库持久化回来的领域模型;这种模式的依赖会向上传递(所有的注入方式都会)直到上层采用构造方法注入和属性注入。

备注

感谢IOC,没有IOC,真的很难爱上DI。

 

0
1
分享到:
评论

相关推荐

    C++ 依赖注入

    1. 创建和使用的分离:依赖注入帮助实现创建对象和使用对象职责的分离,遵循单一职责原则,便于业务逻辑的实现。 2. 显示定义依赖关系:通过依赖注入,依赖关系变得明确,有助于理解系统结构并减少不必要的耦合。 3....

    c# 依赖注入 控制反转

    IoC,即"Inversion of Control"(控制反转),是软件工程领域的一个重要概念,特别是面向对象编程中的一个关键设计原则。从字面上理解,IoC指的是程序运行时控制流的方向发生了“反转”。传统的程序设计中,应用程序...

    Go-go-di:一个实现依赖注入的Go库

    Go-di 是一个专门为 Go 语言设计的依赖注入库,它简化了在 Go 应用程序中管理对象及其依赖关系的过程...在实际开发中,结合良好的设计原则和模式,如面向接口编程,可以进一步提升代码质量,使项目更加健壮和易于维护。

    一个轻量级的PHP依赖注入框架

    依赖注入(Dependency Injection,简称DI)是一种设计模式,它在软件工程中被广泛应用于解耦组件,提高代码的可测试性和可维护性。在PHP世界里,依赖注入框架可以帮助开发者更方便地管理类之间的依赖关系,减少硬...

    php依赖注入demo

    总结来说,依赖注入是一种强大的设计原则,它可以降低系统组件间的耦合度,提高代码的可测试性和可维护性。通过理解并应用依赖注入,我们可以编写出更加灵活和易于维护的PHP应用程序。在实践中,结合使用各种注入...

    第三章 Spring4 依赖注入

    依赖注入是面向对象设计原则之一,它将对象之间的依赖关系反转,由外部容器负责管理对象及其依赖。原本对象需要自行创建或查找依赖的对象,而现在这些依赖由容器在运行时传递给对象,对象只需声明对哪些依赖感兴趣,...

    详解Spring基于Annotation的依赖注入实现

    依赖注入是一种设计模式,用于减少代码之间的耦合度。在传统的编程方式中,一个类通常会创建并管理其所有依赖的对象,这种方式会导致代码的复杂性和耦合度增加。而依赖注入则将这种依赖关系的创建和管理转移到外部...

    Spring 控制反转 依赖注入

    2. **Java注解配置**:使用如`@Component`、`@Service`、`@Repository`和`@Controller`等注解来标记组件,以及`@Autowired`、`@Qualifier`等注解进行依赖注入。 3. **Java配置类**:从Spring 3.0开始引入,使用`@...

    MVC4使用Autofac实现依赖注入Demo

    **正文** 在软件开发中,依赖注入(Dependency Injection,简称DI)是一种设计模式,它能够帮助我们构建松耦合、可测试和可维护...在实际开发中,结合良好的设计原则和模式,如面向接口编程,可以进一步提高代码质量。

    【ASP.NET编程知识】在.NET Core控制台程序中如何使用依赖注入详解.docx

    依赖注入(Dependency Injection,简称DI)是一种面向对象编程设计原则,用于减少代码之间的耦合度。在.NET Core中,我们可以使用内置的依赖注入模块Microsoft.Extensions.DependencyInjection来实现依赖注入。 在...

    设计模式之依赖倒转原则

    依赖倒转原则(Dependency Inversion Principle,DIP)是面向对象设计的基本原则之一,它在软件工程中扮演着至关重要的角色。...在C#中,通过接口和依赖注入等机制,可以很好地实现这一原则,提升软件设计的质量。

    19丨理论五:控制反转、依赖反转、依赖注入,这三者有何区别和联系?1

    依赖反转、控制反转和依赖注入是面向对象编程中重要的设计原则和实践,它们在软件设计中扮演着关键角色,尤其在Spring框架中被广泛应用。现在,让我们深入理解这三个概念的区别和联系。 首先,依赖反转(Dependency...

    Spring系列之依赖注入的三种方式.docx

    【Spring 依赖注入详解】 在 Spring 框架中,...在实际应用中,开发者通常根据组件的需求和设计原则来选择合适的依赖注入方式。结合使用两种注入策略,可以更好地管理对象的依赖关系,提高代码的可读性和可维护性。

    Spring_依赖注入_面向接口编程

    面向接口编程是一种设计原则,它强调程序应通过接口而不是具体实现进行交互。在Java中,这意味着我们定义接口,然后创建其实现类。这样做的好处包括: 1. **易扩展**:增加新的功能或修改现有功能,只需要实现新的...

    SpringIOC_泛型依赖注入.zip

    在Spring框架中,IOC(Inversion of Control,控制反转)是一种设计原则,它将对象的创建和管理交给了容器,从而让代码更加解耦、可维护。本资料包"SpringIOC_泛型依赖注入.zip"主要关注的是Spring如何通过泛型进行...

    面试官常问的spring依赖注入和bean的装配问题.pdf

    在Spring框架中,依赖注入(Dependency Injection,DI)是一种设计模式,用于实现控制反转(Inversion of Control,IoC),降低组件之间的耦合度,使得各个组件的职责更加清晰。在Spring的面试中,面试官常会问到...

    依赖倒置原则-软件工程思想

    2. **使用依赖注入**:依赖注入是一种常用的设计模式,它允许在运行时动态地注入对象所需的依赖关系。通过依赖注入,可以减少类之间的直接耦合,使得代码更易于测试和维护。 3. **避免紧耦合**:紧耦合是指一个模块...

    Java依赖注入框架Guice2

    Java依赖注入框架Guice2是Google开发的一款轻量级的依赖注入库,它极大地简化了Java应用程序中的对象...在实际项目中,结合Guice2和其他Java框架(如Spring)的经验,可以更好地理解和应用依赖注入这一核心设计原则。

    依赖倒置+控制反转+依赖注入+面向接口编程

    在实际开发中,我们通常会使用IoC容器(如Spring框架)来实现依赖注入,通过定义和实现接口来遵循面向接口编程的原则,从而实现这些设计理念。这样的设计模式不仅使代码更加简洁,也更容易适应需求变化,是构建高...

    Spring_依赖注入_面向接口编程_不同加载方式

    另一方面,面向接口编程是一种重要的设计原则,它提倡在代码中使用接口而非具体实现。在Spring中,我们通常定义一个接口,然后创建其实现类。例如: ```java public interface ExampleService { void doSomething...

Global site tag (gtag.js) - Google Analytics