Another way to solve this problem would be to move the ```RouteCollectionBuilderExtensions``` to Mvc and only introduce a sample one in samples. this way the sample will look concise, while avoiding the problem of forcing every one using routing to provide a service provider. 
The sample will look something like:
```c#
           var collectionBuilder = new RouteCollectionBuilder(new RouteCollection());

            var endpoint1 = new DelegateRouteEndpoint(async (context) =>
                                                        await context
                                                                .HttpContext
                                                                .Response
                                                                .WriteAsync(
                                                                  "match1, route values -" + context.Values.Print()));

            collectionBuilder.DefaultHandler = endpoint1;

            collectionBuilder.AddPrefixRoute("api/store");

            collectionBuilder.MapRoute("defaultRoute",
                                       "api/constraint/{controller}",
                                       null,
                                       new { controller = "my.*" });

            builder.UseRouter(collectionBuilder.Routes);
```
The reason why I didn't do it was once we introduce services here, the code will have an implicit notion of services and it would not be odd for the startup code to initialize the Service provider on ```IRouteCollectionBuilder```.
 
@davidfowl , @loudej , @rynowak , @yishaigalatzer would like your comments on this as well.