Is there any chance that we can rename this? IPageLink is a bit confusing. You're creating a PageLink, but passing an IPageLink into it. How about if we call it IPageProvider or IPageFactory or something? That's really what it's doing. To avoid breaking API, I would suggest:
1. Create IPageProvider (or whatever) interface with the exact same methods as IPageLink. 2. Take method declarations out of IPageLink and have it extend IPageProvider. 3. Make PageLink's constructor take an IPageProvider instead. I think applications will need to be recompiled against the new hierarchy. 3. Deprecate IPageLink so that it can be removed in a future release. Thoughts?
