Ninject InRequestScope()与InThreadScope()

问题描述 投票:0回答:1

它们之间有什么区别? InRequestScope依赖于HttpContext.Current,它仅可从请求线程使用,因此它与InThreadScope不同吗?

c# asp.net dependency-injection ninject
1个回答
1
投票

如果您希望对象在HttpRequest上下文中存在时声明了绑定InThreadScope,则会遇到很多问题:

  • phantom objects:一个线程将用于处理许多请求。在线程开始为其第一个请求提供服务时实例化的某些对象将在其他请求的上下文中反复使用,您可能希望在该实例中实例化新对象
  • 对象泄漏:像SqlConnections之类的必须在请求末尾放置的对象将不再被放置,直到线程被回收为止,而您无法对其进行控制]]
  • 随机上下文切换
  • :异步/等待操作通常意味着线程切换。这将导致意外行为,因为工厂可能在await操作之前和之后返回不同的对象。

    您不应该在HttpRequest的上下文中使用InThreadScope,因为您不应该在同一上下文中使用ThreadStatic属性

© www.soinside.com 2019 - 2024. All rights reserved.