Just to provide a bit of context around my use case (most of which you've seen already).
I've created a UriTemplateAttribute attribute that can be attached to resource classes. UriTemplateAttribute takes a prefix and the remainder of a uri template path:
public class User
I use UriTemplateAttribute in several ways at app startup:
1) The app reflects over all the classes attributed with UriTemplateAttribute, and builds a UriFactory, which can then be used for building relative and absolute URIs, and deriving base URIs.
2) I register all the classes attributed with UriTemplateAttribute in the RouteTable based on the prefix value of the attribute.
3) I also use the info in UriTemplateAttribute to modify the UriTemplate parameters of all WebGet and WebInvoke attributes. Hence the need to modify the service description. (This assumes, of course, that all the methods for a resource class share the same
This then allows me to have DRY URIs: there's only once place in the code I need change the URI details for a particular resource - the UriTemplateAttribute attached to that resource's class.