作者: 一去、二三里
个人微信号: iwaleon
微信公众号: 高效程序员
访问服务
如果构建了一个 LogService 作为服务,并将其注册到服务注册中心。这时要在其它 Plugin 中使用 LogService 来记录日志,你可能会想到这种方式:
- 使用 ctkPluginContext::getServiceReference() 获取服务引用
- 通过 ctkPluginContext::getService() 获取指定 ctkServiceReference 引用的服务对象
然而,这需要编写非常复杂的代码。并且比较麻烦的是,有时想调用 LogService 服务,但它根本不可用!
也许你还会想到 ctkPluginContext::connectServiceListener(),但它是用于监听各种服务的。如果要监听某一种特定服务的话,则需要指定一个 filter,相对比较麻烦。此外,这种方式存在一个问题 - 无法监听到已经存在的 Service。
那么,到底该如何监听某一种特定的服务呢?为此,CTK 提供了一个 ctkServiceTracker 类,它对 Service 的获取要比 ServiceListener 简单许多,并且可以解决不能监听到已经存在的 Service 的问题。
Log 插件
我们需要做的第一件事,是实现 Log 插件,用于提供日志服务。
在这个插件里面,我们定义了一个 LogServi