Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart何时使用镜像API_Dart_Dart Mirrors - Fatal编程技术网

Dart何时使用镜像API

Dart何时使用镜像API,dart,dart-mirrors,Dart,Dart Mirrors,这可能是一个愚蠢的问题,所以很抱歉问这个问题,告诉你,我对这类事情还不熟悉 在阅读了有关镜像的文档之后,我只能理解镜像API就像复制某个实例加上访问某个我不知道何时/为什么要使用的方法 如果有人愿意给我一些指针,举个例子就好了。镜像API允许您以编程方式(在执行期间)检索有关对象和类型的元数据,并在对象上执行方法。它与.NET或Java中的类似 一个典型的例子是实现插件支持: 假设您定义了一个IPlugin接口,并希望在PluginManager中自动注册实现它的每种类型的实例,而无需显式注册每

这可能是一个愚蠢的问题,所以很抱歉问这个问题,告诉你,我对这类事情还不熟悉

在阅读了有关镜像的文档之后,我只能理解镜像API就像复制某个实例加上访问某个我不知道何时/为什么要使用的方法


如果有人愿意给我一些指针,举个例子就好了。

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

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

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

您可以这样做(警告:我从未使用过镜像API,因此这是基于API文档的高级描述,不是正确的实现):

  • 首先使用
    MirrorSystem.libraries
    为该
    MirrorSystem
    中的每个库获取
    LibraryMirror
    实例
  • 然后,对于每个
    LibraryMirror
    使用
    classes
    属性为库中的每个类获取
    ClassMirror
  • 对于每个
    ClassMirror
    使用
    superinterfaces
    获得所有实现的接口
  • 如果任何实现的接口是
    IPlugin
    ,则可以创建该类的实例(
    ClassMirror.newInstance
    )并向插件管理器注册
如果没有镜像API,您将无法枚举所有类型、找到它们实现的接口(不创建对象)或创建您事先不知道的类型的实例


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

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

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

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

您可以这样做(警告:我从未使用过镜像API,因此这是基于API文档的高级描述,不是正确的实现):

  • 首先使用
    MirrorSystem.libraries
    为该
    MirrorSystem
    中的每个库获取
    LibraryMirror
    实例
  • 然后,对于每个
    LibraryMirror
    使用
    classes
    属性为库中的每个类获取
    ClassMirror
  • 对于每个
    ClassMirror
    使用
    superinterfaces
    获得所有实现的接口
  • 如果任何实现的接口是
    IPlugin
    ,则可以创建该类的实例(
    ClassMirror.newInstance
    )并向插件管理器注册
如果没有镜像API,您将无法枚举所有类型、找到它们实现的接口(不创建对象)或创建您事先不知道的类型的实例


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

一个缺点是镜像API与dart2js一起使用时会导致代码大小增加。使用镜像api使dart2js更难优化代码。我认为dart2js对镜像api的支持还没有完全实现。一般来说,只有当您需要在运行时动态检查代码结构时才应该真正使用它。一个缺点是镜像api与dart2js一起使用时会导致代码大小增加。使用镜像api使dart2js更难优化代码。我认为dart2js对镜像api的支持还没有完全实现。通常,只有当您需要在运行时动态检查代码结构时,才应该真正使用它。