Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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
Reflection 在外部库上使用可反射的省道_Reflection_Dart_Dart Mirrors - Fatal编程技术网

Reflection 在外部库上使用可反射的省道

Reflection 在外部库上使用可反射的省道,reflection,dart,dart-mirrors,Reflection,Dart,Dart Mirrors,我需要在第三方lib上使用reflectable,但它不起作用 考虑以下情况: 库A具有反射器声明: class Reflector extends Reflectable { const Reflector() : super(invokingCapability, typeRelationsCapability, metadataCapability, superclassQuantifyCapability,

我需要在第三方lib上使用reflectable,但它不起作用

考虑以下情况:

库A具有反射器声明:

class Reflector extends Reflectable {
    const Reflector()
        : super(invokingCapability,
        typeRelationsCapability,
        metadataCapability,
        superclassQuantifyCapability,
        reflectedTypeCapability);
}

const Reflector reflector = const Reflector();
库B具有用反射器注释的类:

import 'package:library_a/library_a.dart' show reflector;

@reflector
class whateverz {}
现在,应用程序C需要对库B中的whateverz类使用反射

我的问题是可反射库看不到注释的whateverz类。构建警告“reflector.dart:此反射器与任何内容都不匹配”

如果我执行“print(reflector.annotatedClass);”操作,它会在控制台中打印[]

这可能吗?在第三方库中注释我将在带有反射的应用程序中使用的类?
如果是,我做错了什么?

我怀疑转换没有在正确的主文件上执行

转换器能够在程序中查找任何声明,因此如果程序中有一个库正在导入库B(因此也是库a),那么转换器肯定能够为
类whateverz
生成镜像,您应该在反射器.annotatedClass中找到镜像

但在转换过程中考虑的文件集是从入口点导入的可传递闭包(即,在
pubspec.yaml
中指定的
入口点
中的相关元素),因此,如果您指定的入口点不是实际的主文件,那么transformer可能会使用更小(或只是不同)的库集。例如,如果使用库A作为入口点,则转换器将不知道库B存在(假设库A不直接或间接导入库B),因此转换器不会发现库B中的任何声明,也不会获得相应的镜像

如果您正在处理其他开发人员将导入和使用的库,则需要告诉他们在其
pubspec.yaml
中包含可反射转换器,并向
入口点添加一个元素(或者检查他们使用的通配符是否已匹配所有所需入口点)

您可以查看一个小示例,其中一个文件中的反射器用于注释不同文件中的类,您还可以查看如何进一步解耦反射器、目标类和其他元素(例如,使用
GlobalQuantifyCapability
将某个反射器与某个目标类关联,而无需编辑包含目标类的文件)