Creating a publishable datatype
To create a publishable datatype like IPage, your type has to derive from the IPublishControlled interface.
Two interface attributes are also required, namely DataScope and PublishProcessControllerType. There is one optional attribute to consider when creating a publishable datatype and that is PublishControlledAuxiliary.