I see. The datasets you want to expose makes sense. What are you suggesting to remove the boilerplate of writing factories (excepting an abstract factory)? Additionnally, to solve the performance problem, the simplest solution would be to inject the service locator into the router... but I'm sure you won't like it.