Controller selectors shouldn't need to populate the route data. Routing will populate the route data. The way the default pipeline works is something like this:
Routing runs - finds a matching route and populates the route data with values like "controller", "action", other parameters The controller selector runs - looks at the route data for the "controller" route parameter and uses that controller name to figure out what controller type to use
The framework then uses the selected controller type to dispatch the request