Ninject InRequestScope () против InThreadScope () - PullRequest
0 голосов
/ 24 октября 2019

Какая разница между ними? InRequestScope полагается на HttpContext.Current, который доступен только из потока запроса, поэтому он отличается от InThreadScope?

1 Ответ

1 голос
/ 25 октября 2019

Если вы объявите привязку InThreadScope, когда ожидаете, что ваши объекты будут жить в контексте HttpRequest, вы столкнетесь со многими проблемами:

  • фантомных объектов : aпоток будет использоваться для обслуживания многих запросов. Некоторые объекты, которые были созданы, когда поток начал обслуживать свой первый запрос, будут снова и снова использоваться в контексте других запросов, где можно ожидать создания новых объектов
  • утечка объектов : некоторые объекты, такие как SqlConnections, которые должны быть расположены в конце запроса, больше не будут удаляться до тех пор, пока поток не будет перезагружен, что не контролируется
  • случайными переключателями контекста : async /Операции ожидания часто означают переключение потоков. Это приведет к неожиданному поведению, поскольку фабрики могут возвращать различные объекты до и после операции ожидания

Не следует использовать InThreadScope в контексте запроса HttpRequest, так как вы не должны использовать ThreadStatic атрибут в этом же контексте

...