最初に事実を明確にする: Prism は ServiceLocator の使用を推奨していません。これは質問を無意味にします。たぶん、質問の名前を「プリズムの本が奨励するのはなぜですか...」に変更したいと思うかもしれません。
Prism は、Microsoft の IoC コンテナーの実装である Unity IoC 上に構築されています。タイプを登録すると、適切にビルドされます。これを行う方法を示すインターネット上の多くの記事があります。
さて、石鹸箱の部分:
I would argue that there are no such things as best practices, as any 'best practice' don't make sense in certain context. For example, when I see a singleton, it always rings an alarm, but there are situations where it is OK to have it. Even 'goto' is sometimes justified (oh my God! what did he just say?!?!)
Now, I don't know much about Prism, but IMO, service locator can make perfect sense, especially if it is used inside a framework, as it can leave the developer with more design and implementation choices, and that should be the developer's call.
To really understand whether it is a wrong decision (and it likely might be) it would be interesting to see what things developers using Prism can't do because of alleged use of ServiceLocator, which otherwise would be possible if Prism used DI.