.net core依赖倒置原则

值对象放在栈上,引用对象放在堆上

垃圾回收策略:引用计数,分代回收,对象压缩。第一代(0),第二代(1),第三代(2)

对象回收并非一直在发生,它只有在系统物理内存不足,达到内存回收阈值,手动调用GC.Collect方法等情况下发生。而且垃圾回收过程并非对程序毫无副作用,在某些性能要求特别高的场景,例如高并发场景下,发生计划外的垃圾回收,可能会导致程序偶发性变得卡顿,可能会造成用户体验度的下降

单一职责原则,开闭原则,里式替换原则,接口分离原则,依赖倒置原则,合成复用原则

依赖倒置

在.NET Core中,ASP.NET Core内置了依赖注入容器IServiceCollection和服务提供者IServiceProvider。对开发者来说,通过建立抽象,提取出接口或基类,再将该对象注册到依赖注入容器中。

在服务调用时,上层应用不再通过new的形式使用下层接口,而是在构造函数中,通过引入依赖注入框架实例化的下层实现,并由该框架来统一管理对象的生命周期。

这就是依赖注入框架所采取的手段。

  • 在.NET Core提供的依赖注入框架中,提供了三种不同的生命周期。
    • SingleTon单例生命周期,这种模式有点像设计模式中的单例模式,通俗而言,就是在软件的整个生命周期只会出现唯一一次实例,并随着应用程序的结束而销毁。他有点像全局静态变量,只是整个过程都由依赖注入框架管理。许多全局变量都可以通过该生命周期所提供的服务层维护。只有一个实例,如Microsoft.Extensions.Logging.ILogger

    • Scoped生命周期,用中文翻译有点像作用域,这个作用域如何理解呢,我们都知道,http请求实际上是以为会话的形式进行的,每个会话往往会有IIS宿主开辟独立的线程来进行支持,那么这个作用域大概就像是给每个会话开辟的独立线程。在这个线程的生命周期内,开发者都能从依赖注入框架中,便捷的引入适当的服务层来提供业务支持。每次请求是同一个实例,如 Entity Framework contexts

    • Transient生命周期,瞬时生命周期。一瞬间就过去了,说明时间很快。每次调用都是不同的实例,比如常用的Microsoft.Extensions.Options.IConfigureOptions

    • 具体使用哪种,要根据具体情况而定:1、比如我们一般的业务逻辑都是Transient,这个也是比较常用的;2、Scoped相对用的比较少,当然也有很多业务逻辑也有用Scoped的;当然他的妙用肯定是每次请求一个实例,比如我们在系统中获取登录系统用户的Id,这时就可以用Scoped,不管在Service层或者Repository层等等,获取的都是同一个用户;3、Singleton很多都是系统级别设计用单利,比如日志;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值