结构

gioIOExtensionPoint

描述 [src]

struct GIOExtensionPoint {
  /* No available fields */
}

GIOExtensionPoint 提供了一种机制,使得模块能够按照一种组织方式扩展已加载库或应用程序的功能。

扩展点通过名称进行标识,并且它可以选择性地要求任何实现必须是某种类型(或该类型的派生类型)。使用 g_io_extension_point_register() 注册扩展点,并使用 g_io_extension_point_set_required_type() 设置所需类型。

模块可以通过指定实现功能的 GType 来实现扩展点。此外,扩展点的每个实现都有一个名称和优先级。使用 g_io_extension_point_implement() 实现扩展点。

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);

至于注册扩展点的代码如何使用与其相关联的实现,这取决于使用案例。它可能使用所有实现,或者仅使用优先级最高的一个,或者通过名称选择特定的一个。

为了避免为了找出模块实现了哪些扩展点而打开所有模块,GIO 使用了一种缓存机制,请参阅 gio-querymodules。你们需要在安装 GIO 模块后运行此命令。

可以通过 GIO_EXTRA_MODULES 环境变量来指定要自动从其中加载模块的附加目录。此环境变量的语法与 PATH 相同。如果在不同的目录中存在两个具有相同基本名称的模块,则后者将被忽略。如果指定了附加目录,GIO 将在最后从内置目录中加载模块。

函数

g_io_extension_point_implement

type 注册为名为 extension_point_name 的扩展点的扩展。

g_io_extension_point_lookup

查找现有的扩展点。

g_io_extension_point_register

注册扩展点。

实例方法

g_io_extension_point_get_extension_by_name

通过名称查找扩展点的 GIOExtension

g_io_extension_point_get_extensions

获取实现此扩展点的所有扩展的列表。列表按优先级排序,从最高优先级开始。

g_io_extension_point_get_required_type

获取 extension_point 的所需类型。

g_io_extension_point_set_required_type

extension_point 的所需类型设置为 type。所有实现必须从此具有此类型。