Hi,
thanks for the feedback.
The module-specific extension does not need to belong to the module's assembly itself. It is declared as a dotnet type in a config file and thus can be nicely decoupled from the targeted module.
Note that the provider does not need such an extension to perform some rewritting on any module's params.
It's just that as most module handle specific entities, turning those entities's primary key http parameters into human friendly equivalent requires that those module tell the Url provider how to do so.
This is precisely what those extensions intend to do.
For instance, the default extension knows how to transform tabids and moduleids into tab path + tabname and module title respectively (amongst many others).
Without a dedicated extension, one can rewrite the forum's urls by trimming out the tabids the mids and the name of the forum's http parameters, but one is still left with the threadids and other primary key parameters.
The forum specific extension tells the provider how to transform groupid/forumid/threadid into respectively group name, forum name, thread name.
It also tells the provider which http parameters from the orginal url do belong to a forum module if no module id is provided to figure it out. Finally, the provider can provide a default rewrite rule, that makes use of the new variables and regular http parameters.
The admin user can later customize such a rule at the module and the page level.
Here's the rule applied on our website:
[${Scheme}][${RootPath}][/${Language}][/${TabPath}][/${TabName}][/${ModuleTitle}][/${groupname}][/${forumname}][/${threadname}][/${threadpage}][/${postid}][/${scope}][/${action}][/${ControlKey}][/${Params,SubPath}][.${Extension}][?${QueryString,QueryStringValue}]
you can see that "postid", "scope" and "action" are used as regular http parameters and do not require any specific extension to be included in the url (directly without the parameter name).
"groupname", "forumname" and "threadname" do not correspond to any available http parameter in the original url: they are part of the additional "vocabulary" brought by the provider's specific extensions.
Hope that makes it clearer.
Cheers