zoukankan      html  css  js  c++  java
  • asp.net core ServiceProvider

     

    针对每次请求所使用的ServiceProvider依然是WebHost的ServiceProvider吗?

      对于某个由ServiceProvider提供的服务对象说,针对它的回收也是由这个ServiceProvider来完成的。

      具体来说,非根(root)ServiceProvider在自身被回收的时候,由它提供的采用Scoped和Transient模式的服务实例会自动被回收;至于采用Singleton模式的服务实例,针对它们的回收发生在根(root)ServiceProvider自身被回收的时候

     

     

    如果不是 ,那么两者是什么关系?

      如果我们在这个ServiceProvider上以Transient模式注册了一个服务,这意味着每次从ServiceProvider提取的都是一个全新的对象。如果这些对象引用着一些需要被回收的资源,我们希望资源的回收应该在每次请求处理结束之后自动执行。

      如果管道每次处理请求时所使用的都是同一个ServiceProvider对象,那么针对服务实例的回收只能在整个应用终止的时候才会发生(因为服务始终被这一个ServiceProvider所引用),这无疑会产生内存泄漏的问题。基于这个原因。

      管道总是会创建一个新的ServiceProvider来提供处理每个请求所需的服务,并且这个ServiceProvider将在每次请求处理完成之后被自动回收掉

      这样一个ServiceProvider被创建之后直接保存到当前的HTTP上下文中,我们可以利用HttpContext的RequestServices属性得到这个ServiceProvider

     

    总结就是:

      单例模式下,服务被根(root)ServiceProvider构建出来,并且由它回收

      Scoped和Transient模式下则是由每个单独的http请求中创建的新ServiceProvider构建与回收

      如果当前无法使用ASP.NET 需要开发一套新的框架,不论是传输协议是什么、不论解编码协议是什么,在IOC这一块都可以沿用ASP.NET CORE的处理逻辑,且开发成本很低,只需要在几个关键点引入ServiceProvider

  • 相关阅读:
    五种开源协议(GPL,LGPL,BSD,MIT,Apache)
    我想要做的编码机器人
    2017年前端框架、类库、工具大比拼
    Python实现好友全头像的拼接
    Python 中的闭包与装饰器
    Vuex2.0边学边记+两个小例子
    Vue.js写一个SPA登录页面的过程
    react与vue
    20行js代码制作网页刮刮乐
    css3动画详解
  • 原文地址:https://www.cnblogs.com/Scissors/p/10810748.html
Copyright © 2011-2022 走看看