If I get this correctly, you are instantiating all the providers all the time here. Isn't it simpler to pass the service locator to the cache provider and then use a map in there?