Whether global request information should be passed to a service's constructor is still up for debate (T218555). By doing so, BlockManager is choosing one side of the debate and inviting the pattern to be copied.
We should return to getting this information in User::getBlockedStatus and passing it into BlockManager::getUserBlock. (This is also not good, but it is what was happening before the BlockManager was made.)
BlockManager is a work in progress; eventually blocks should be decoupled from User (T221067), and the BlockManager should have a public API for getting blocks (see also T230363). Until then, we could make it clearer what the internal BlockManager::getUserBlock method is currently doing by grouping the different places it looks for blocks according to the type of User calling the method.