美文网首页
在DI的Framework中New一下有什么了不起

在DI的Framework中New一下有什么了不起

作者: Elton_Peng | 来源:发表于2018-09-03 20:52 被阅读0次

DI framework不仅是用来管理注入这一个动作的,它的意义还在于,

  1. 使用DI的代码库可以做到彻底避免静态方法调用(static cling),避免隐藏静态依赖关系。
    比如一个静态调用藏在了一大段逻辑之中,并没有以属性或者构造器参数的形式把调用的依赖关系暴露出来,那么此时就增加了重构、优化、甚至可读性的难度。
  2. 【重点】统一管理对象生命周期,以ASP.Net Core为例,容器中对象生命周期分为Transient,Scoped和Singleton三种类型。DI容器可以全局统一管理容器中的对象生命周期,为平衡性能、安全控制等全局调度性任务统一规划管理。ASP.Net Core中就可以调用容器中IDispose对象的Dispose方法而达到优化资源的目的。
    所以如果我们在DI的代码库中New一个对象出来,那么便破坏了容器对所有对象生命周期的控制程度。一个生命周期过长的对象可能会导致很难定位的bug。
  3. 创建一个新的对象并管理其生命周期其实是一段逻辑的隐藏职责,这点往往并不被重视,是因为往往创建出的是局部变量而在方法执行完毕之后即随着外层逻辑一起被销毁。但是从单元测试的角度就可以发现,业务逻辑基本上不会与创建对象这一动作相关,更多的是基于对象的行为和数据来组织当前的期望结果。因此,应当根据当前业务逻辑的真正职责来判定对象生命周期的处理逻辑,在不需要管理对象生命周期的时候就不要自行创建新的对象。

不是讲单一职责吗,DI容器的职责就是管理依赖对象的生命周期,抢别人饭碗不好吧。

相关文章

网友评论

      本文标题:在DI的Framework中New一下有什么了不起

      本文链接:https://www.haomeiwen.com/subject/xcwiwftx.html