Dart何时使用镜像API
这可能是一个愚蠢的问题,所以很抱歉问这个问题,告诉你,我对这类事情还不熟悉 在阅读了有关镜像的文档之后,我只能理解镜像API就像复制某个实例加上访问某个我不知道何时/为什么要使用的方法Dart何时使用镜像API,dart,dart-mirrors,Dart,Dart Mirrors,这可能是一个愚蠢的问题,所以很抱歉问这个问题,告诉你,我对这类事情还不熟悉 在阅读了有关镜像的文档之后,我只能理解镜像API就像复制某个实例加上访问某个我不知道何时/为什么要使用的方法 如果有人愿意给我一些指针,举个例子就好了。镜像API允许您以编程方式(在执行期间)检索有关对象和类型的元数据,并在对象上执行方法。它与.NET或Java中的类似 一个典型的例子是实现插件支持: 假设您定义了一个IPlugin接口,并希望在PluginManager中自动注册实现它的每种类型的实例,而无需显式注册每
如果有人愿意给我一些指针,举个例子就好了。镜像API允许您以编程方式(在执行期间)检索有关对象和类型的元数据,并在对象上执行方法。它与.NET或Java中的类似 一个典型的例子是实现插件支持: 假设您定义了一个
IPlugin
接口,并希望在PluginManager
中自动注册实现它的每种类型的实例,而无需显式注册每个新实现。有时候,你甚至不知道所有的插件,例如,如果用户可以部署自己的插件
您可以这样做(警告:我从未使用过镜像API,因此这是基于API文档的高级描述,不是正确的实现):
- 首先使用
为该MirrorSystem.libraries
中的每个库获取MirrorSystem
实例LibraryMirror
- 然后,对于每个
使用LibraryMirror
属性为库中的每个类获取classes
ClassMirror
- 对于每个
使用ClassMirror
获得所有实现的接口superinterfaces
- 如果任何实现的接口是
,则可以创建该类的实例(IPlugin
)并向插件管理器注册ClassMirror.newInstance
老实说,我不确定Dart中镜像API的当前状态,我相信它还没有完成,但我可能错了。镜像API允许您以编程方式(在执行期间)检索对象和类型的元数据,并在对象上执行方法。它与.NET或Java中的类似 一个典型的例子是实现插件支持: 假设您定义了一个
IPlugin
接口,并希望在PluginManager
中自动注册实现它的每种类型的实例,而无需显式注册每个新实现。有时候,你甚至不知道所有的插件,例如,如果用户可以部署自己的插件
您可以这样做(警告:我从未使用过镜像API,因此这是基于API文档的高级描述,不是正确的实现):
- 首先使用
为该MirrorSystem.libraries
中的每个库获取MirrorSystem
实例LibraryMirror
- 然后,对于每个
使用LibraryMirror
属性为库中的每个类获取classes
ClassMirror
- 对于每个
使用ClassMirror
获得所有实现的接口superinterfaces
- 如果任何实现的接口是
,则可以创建该类的实例(IPlugin
)并向插件管理器注册ClassMirror.newInstance
老实说,我不确定Dart中镜像API的当前状态,我相信它还没有完成,但我可能错了。一个缺点是镜像API与dart2js一起使用时会导致代码大小增加。使用镜像api使dart2js更难优化代码。我认为dart2js对镜像api的支持还没有完全实现。一般来说,只有当您需要在运行时动态检查代码结构时才应该真正使用它。一个缺点是镜像api与dart2js一起使用时会导致代码大小增加。使用镜像api使dart2js更难优化代码。我认为dart2js对镜像api的支持还没有完全实现。通常,只有当您需要在运行时动态检查代码结构时,才应该真正使用它。