рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдШрдЯрдХ рдПрдХ рджрд╛рдпрд░реЗ рд╡рд╛рд▓реЗ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рд╣реЛ
рдкреНрд░рддрд┐ рдЕрдиреБрд░реЛрдз рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реБрдП, рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рджрд╛рдпрд░реЗ рд╡рд╛рд▓реЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдШрдЯрдХ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдШрдЯрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХрд╛рд░рдЦрд╛рдиреЗ рд╡рд┐рдзрд┐ред рд╣рд░ рдмрд╛рд░ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реИрдХреНрдЯрд░реА рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред
ValuesController рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП F5 рджрдмрд╛рдПрдВ рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
рд▓реМрдЯрд╛рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдереА, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдирдП рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рдХрд╛рдЙрдВрдЯрд░ рд╣рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд░рд╣рддрд╛ рд╣реИред
рдпрджрд┐ рд╣рдо рдХреНрд╖рдгрд┐рдХ рдЬреАрд╡рдирдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░рдЦрд╛рдирд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓рд╛ рдХрд╛рдЙрдВрдЯрд░ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдлреИрдХреНрдЯреНрд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИред
рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлреИрдХреНрдЯреНрд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐ (рдЬрдВрдЧрд▓реА рдЕрдиреБрдорд╛рди) рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реЛрдб рдореЗрдВ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рджрд╛рдпрд░рд╛ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред
рдЖрдкрдХреЛ рдЬреЛ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред IRequestService
рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рд╣реИ рдЬреЛ рдПрдХ рд╕реНрдХреЛрдкреНрдб рд╕реЗрд╡рд╛ ( Func<IRequestContext>
) рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ Func рд╕реНрдХреЛрдкреНрдб рдХреЗ рдмрдЬрд╛рдп рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдкрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк 1.1.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдирдореВрдирд╛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЙрд▓ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдХреЛрдкреНрдб рд╕реЗрд╡рд╛рдУрдВ ( рдХреИрдкреНрдЯрд┐рд╡ рдирд┐рд░реНрднрд░рддрд╛ ) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд┐рдВрдЧрд▓рдЯрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
System.InvalidOperationException: Cannot consume scoped service 'System.Func`1[DependencyInjection.AddScopedBug.Controllers.IRequestContext]' from singleton 'DependencyInjection.AddScopedBug.Controllers.IRequestService'.
IRequestService
рд╕рд┐рдВрдЧрд▓рдЯрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред
"рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдкрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХ" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ? рдпрд╣ рдПрдХ рдХреНрд╖рдгрд┐рдХ рд╡рд╕реНрддреБ рдкрд░ рдХреНрдпреЛрдВ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ? рд╕рдорд╛рд░реЛрд╣
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдИ рдЧрдИ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдореИрдВ рдЕрд╡рдЧрдд рд╣реВрдВред рд╕рдВрдкреВрд░реНрдг рдмрд┐рдВрджреБ рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рдЙрдЪреНрдЪрддрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╕реНрдХреЛрдкреНрдб рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдмрд╛рдзреНрдп рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдиреНрдп DI рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ DI рдХрдВрдЯреЗрдирд░ рдореЗрдВ рднреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рдХреНрд╖рдгрд┐рдХ рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ред
рд╡реИрд╕реЗ рднреА рдХреНрдпрд╛ рдХреЛрдИ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ? рдпрджрд┐ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗ? рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдФрд░ рдПрдХ рдкреАрдЖрд░ рднреЗрдЬ рд╕рдХрддрд╛ рдерд╛ред
"рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдкрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХ" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ? рдпрд╣ рдПрдХ рдХреНрд╖рдгрд┐рдХ рд╡рд╕реНрддреБ рдкрд░ рдХреНрдпреЛрдВ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ? Func рдХреЛ рдЙрд╕ рд╡рд╕реНрддреБ рдХрд╛ рдХреЛрдИ рдЬреНрдЮрд╛рди рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рдЙрдЪреНрдЪ рд╣реИред
рдЖрдкрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рдЙрд╕рдХрд╛ рдПрдХ рдирдВрдЧреЗ рд╣рдбреНрдбрд┐рдпреЛрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
```рд╕реА#
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рд╕рд┐рдВрдЧрд▓рдЯрди
{
рдирд┐рдЬреА Func
public Singleton(IServiceProvider serviceProvider)
{
_factory = serviceProvider.GetRequiredService<Scoped>;
}
}
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рд╕реНрдХреЛрдкреНрдб
{
}
```
рдЖрдкрдиреЗ рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ "рдЧреИрд░ рд╕реНрдХреЛрдк" IServiceProvider
рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ред
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдиреНрдп DI рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ DI рдХрдВрдЯреЗрдирд░ рдореЗрдВ рднреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рдХреНрд╖рдгрд┐рдХ рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ред
рдЙрди рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдкрд╛рд╕ Func<T>
рд▓рд┐рдП рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХрд╛ рд╕рдорд░реНрдерди рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ IEnumerable<T>
рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред рдпрд╣ Func<T>
рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдпрд╣рд╛рдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд░рд╣реЗ рд╣реИрдВред
рд╡реИрд╕реЗ рднреА рдХреНрдпрд╛ рдХреЛрдИ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИ?
IRequestService
рджрд╛рдпрд░рд╛ рдмрдирд╛рдПрдВред
рдпрджрд┐ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗ? рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдФрд░ рдПрдХ рдкреАрдЖрд░ рднреЗрдЬ рд╕рдХрддрд╛ рдерд╛ред
рд╣рдо DI рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреЛрдИ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рдЪреНрдЫреБрдХ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЙрди рдЕрдзрд┐рдХрд╛рдВрд╢ DI рдХрдВрдЯреЗрдирд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЛрдЧ ASP.NET рдХреЛрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛, рдлрд┐рд▓рд╣рд╛рд▓ рдирд╣реАрдВред рдЕрдЧрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЬрдирддрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ Func<T>
рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ рддреЛ рд╣рдо рдлрд┐рд░ рд╕реЗ рдПрдХ рдФрд░ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╢реЛрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдбреЗрд╡рд┐рдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред IEnumerable<T>
рд╕рдорд░реНрдерди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХрд╛рд╢ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рднреА Func<T>
ред
@uhaciogullari рдореБрдЭреЗ
рдореИрдВрдиреЗ Func<T>
рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдХрд░рдг рдХрд┐рдпрд╛
services.AddScoped<Func<TFoo>>(sp => sp.GetRequiredService<TFoo>);
рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ foo.GetHashCode();
рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реВрдВ рд╡реЗ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡реЗ рд╣рдореЗрд╢рд╛ рдмрд░рд╛рдмрд░ рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЙрд╕ рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдмрд╛рд░ рд╣рд┐рдЯ рд╣реБрдЖ рд╣реИред
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ "рдЪрд╛рд▓" рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рдХреГрдкрдпрд╛ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЯреНрд░рд┐рдХ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддреА рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд▓ рд╣реИ (рддреГрддреАрдп-рдкрдХреНрд╖ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛)?
@grokky1 рджреЗрд░ рд╕реЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдирд╣реАрдВ, рдЙрдкрд╛рдп рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдбреЗрд╡рд┐рдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
IEnumerable<T>
рд╕рдорд░реНрдерди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХрд╛рд╢ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рднреАFunc<T>
ред