你必须要知道的.NET core-----单独使用依赖注入框架的那些事

直入主题添加安装包

添加服务

 

 

 

 

BuildServiceProvider:为当前类创建出代表依赖注入容器的服务对象;见上图 可发现我们可以为一个容器同时注入多个服务;

小伙伴可能会问:为何非要使用接口来进行依赖注入,这也是我最开始比较头疼的 后来发现 ,使用依赖注入一般遵循的都是面向接口开发的开发方式(所以不要在钻牛角尖了)使用依赖注入就是想让系统灵活度更高,扩展度也要高;

 服务已经注册,如何获取服务;

 provider.GetService 服务容器自带的Api 获取服务就像这样:只能返回一个服务实例

 

 

如果给一个接口下注册多个实现类你还可以使用 

 provider.GetServices 返回值是IEnumerable的一个服务集合

 

我们还可以做一些骚操作 :让所有接口都继承一个Base类 注册时使用Base作为接口注册(这样又可以偷懒了QAQ) 代码如下

 

 

 

 下来就来介绍一下三个生命周期 Transient(瞬时模式) Scoped(作用域模式)  Singleton(单例模式) 

  以及.NETCORE支持的子容器(重点理解)

 单例模式下的服务实例保存在根容器中

 作用域模式下的服务实例保存在当前容器中

  瞬时模式------》没有生命的 一次性的

 

 

 

 先来看这段代码  我们先是 创建了一个 root的容器并向里面注入了三个服务(OK?)

  其次我们分别调用了容器的CreateScope().ServiceProvider;------------>在根容器的作用域下创建另一个作用域 ;

 

 如果你的服务注册是 有继承IDisposable接口 ======》意味着当声明周期结束时 调用资源释放操作 由容器来执行

    而释放操作是有一些释放策略的(这些策略根据的是注册模式)

        如果 是瞬时模式并实现了IDisposable接口,当前服务结束时 当前服务会被保存,什么时候会被销毁呢?---》直到服务提供接口《IAccount》(服务提供对象)的Dispose被调用时 被释放;

       如果是单例模式,(他保存在根容器中) 所以 他是到根容器没了 单例才会被Disposr  -----》从哪来回哪去

           ASP.NET CORE应用来说它具有一个与当前应用绑定并且代表全局根容器的服务提供对象

         当ASP.NET CORE处理一个请求时====会创建一个跟这个请求对应的 容器====》并且利用这个容器 来处理这个请求处理所需的       服务(相当于创建一个服务范围) 请求结束-----》这个服务范围就被终结 对应的子容器对象也会被释放,由这个子容器提供的服务对象也会被释放(子容器只能创建 瞬时 和作用域模式下的服务)

 

 

 

 言简意赅:还望细细体会; 

 

 

 

 

posted @ 2021-09-03 16:41  三五八团楚云飞  阅读(232)  评论(0)    收藏  举报