Dart何时使用镜像API

时间:2013-05-17 01:19:34

标签: dart dart-mirrors

这可能是一个愚蠢的问题,很抱歉这个问题,而且我不熟悉这种东西。

在阅读有关镜像的文档之后,我只能理解镜像API就像复制某些实例一样,并且访问某些我不知道何时/为何使用的方法。

任何人都想给我一些指示,一些例子会很好。

1 个答案:

答案 0 :(得分:4)

Mirror API允许您以编程方式(在执行期间)检索有关对象和类型的元数据,并在对象上执行方法。它类似于.NET或Java中的reflection

一个典型的例子是实现插件支持:

假设您定义了一个IPlugin接口,并希望自动向您的PluginManager注册实现它的每种类型的实例,而无需显式注册每个新实现。有时你甚至不提前知道所有的插件,例如如果用户可以部署自己的插件。

你可以这样做(警告:我从未使用过Mirror API,所以这是基于API文档的高级描述,而不是正确的实现):

  • 您首先使用MirrorSystem.libraries获取LibraryMirror
  • 中每个库的MirrorSystem个实例
  • 然后对于每个LibraryMirror,您使用classes属性为库中的每个类获取ClassMirror
  • 为每个ClassMirror使用superinterfaces获取所有已实现的接口
  • 如果任何已实现的接口是IPlugin,您可以创建该类的实例(ClassMirror.newInstance)并将其注册到插件管理器。

如果没有镜像API,您将无法枚举所有类型,找到它们实现的接口(不创建对象)或创建一个您事先不知道的类型的实例。

老实说我不确定Dart中镜像API的当前状态是什么,我相信它还没有完成,但我可能错了。