SPA modules have an extension mechanism, but typically the
TokenReplace type will have a hard-coded list of
IPropertyAccess implementations, see e.g.
HtmlTokenReplace (which is the base class for the SPA module token replace, but also used for the HTML module).
For a SPA module, the module's business controller class can implement
ICustomTokenProvider (here's where that's found and called).