get Embedding Service
EXHAUSTIVE over ModelSelectionCriteria, deliberately and with no else, exactly as getLlm has always been.
The else that used to sit here is how a named model became the deployment's default for sixteen months: it is a compile-time permission slip never to think about embeddings again. getLlm breaks when a criteria type is added; this method absorbed it, which is why PreResolvedModelSelectionCriteria - added later - fell straight into the hole. Adding a criteria type must now break BOTH, and that is the point.
One context read for the whole call. The resolvers answer per role and per name, and every arm asking the holder separately is the asymmetry that makes propagation bugs hard to see.