If I am not mistaken, Transcient are created every GetService() call. Scoped are ThreadStatic (in normal apps), so they are created and exist through a thread's lifetime. However, given that IIS has a pool of application threads, scoped in web is likely per-HTTP request, so likely is implemented via a data slot or saved in the HttpContext.Items collection or as ambient data in Execution context via AsyncLocal.