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

  • 相关阅读:
    Leetcode 238. Product of Array Except Self
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 290. Word Pattern
    Leetcode 205. Isomorphic Strings
    Leetcode 107. Binary Tree Level Order Traversal II
    Leetcode 102. Binary Tree Level Order Traversal
    三目运算符
    简单判断案例— 分支结构的应用
    用switch判断月份的练习
    java基本打印练习《我行我素购物系统》
  • 原文地址:https://www.cnblogs.com/Scissors/p/10810748.html
Copyright © 2011-2022 走看看