В каждый сервис внедрён IServiceProvider, а зависимости достаются через GetService
public class CheckoutService(IServiceProvider sp)
{
public async Task RunAsync(Cart cart)
{
var pricing = sp.GetRequiredService<IPricing>();
var payments = sp.GetRequiredService<IPaymentGateway>();
...
}
}
Чем плох такой подход?
- Зависимости скрыты и ошибки видны только при вызове
- GetRequiredService работает медленнее new
- IServiceProvider нельзя внедрять через конструктор
- Так нельзя получить singleton-сервисы
