### Struct

# Gio IOExtensionPoint

#### Description

    struct GIOExtensionPoint {
      /* No available fields */
    }

`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 be of a certain type (or derived thereof). Use `g_io_extension_point_register()` to register an extension point, and `g_io_extension_point_set_required_type()` 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 `g_io_extension_point_implement()` to implement an extension point.

    GIOExtensionPoint *ep;

    // Register an extension point
    ep = g_io_extension_point_register ("my-extension-point");
    g_io_extension_point_set_required_type (ep, MY_TYPE_EXAMPLE);

    // Implement an extension point
    G_DEFINE_TYPE (MyExampleImpl, my_example_impl, MY_TYPE_EXAMPLE)
    g_io_extension_point_implement ("my-extension-point",
                                    my_example_impl_get_type (),
                                    "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.

To avoid opening all modules just to find out what extension points they implement, GIO makes use of a caching mechanism, see gio-querymodules. You are expected to run this command after installing a GIO module.

The `GIO_EXTRA_MODULES` environment variable can be used to specify additional directories to automatically load modules from. This environment variable has the same syntax as the `PATH`. If two modules have the same base name in different directories, then the latter one will be ignored. If additional directories are specified GIO will load modules from the built-in directory last.

#### Functions

###### g_io_extension_point_implement

Registers `type` as extension for the extension point with name `extension_point_name`.

###### g_io_extension_point_lookup

Looks up an existing extension point.

###### g_io_extension_point_register

Registers an extension point.

#### Instance methods

###### g_io_extension_point_get_extension_by_name

Finds a `GIOExtension` for an extension point by name.

###### g_io_extension_point_get_extensions

Gets a list of all extensions that implement this extension point. The list is sorted by priority, beginning with the highest priority.

###### g_io_extension_point_get_required_type

Gets the required type for `extension_point`.

###### g_io_extension_point_set_required_type

Sets the required type for `extension_point` to `type`. All implementations must henceforth have this type.