GIOExtensionPoint
provides a mechanism for modules to extend the
functionality of the library or application that loaded it in an
organized fashion. An extension point is identified by a name, and it may optionally
require that any implementation must by of a certain type (or derived
thereof). Use gIoExtensionPointRegister
to register an
extension point, and gIoExtensionPointSetRequiredType
to
set a required type. A module can implement an extension point by specifying the GType
that implements the functionality. Additionally, each implementation
of an extension point has a name, and a priority. Use
gIoExtensionPointImplement
to implement an extension point.
## Register an extension point
ep <- gIoExtensionPointRegister("my-extension-point")
ep$setRequiredType(MY_TYPE_EXAMPLE)
## Implement an extension point
myExampleImplType <- gClass("MyExampleImpl", MY_TYPE_EXAMPLE)
gIoExtensionPointImplement ("my-extension-point",
myExampleImplType,
"my-example",
10);
It is up to the code that registered the extension point how
it uses the implementations that have been associated with it.
Depending on the use case, it may use all implementations, or
only the one with the highest priority, or pick a specific
one by name.