Reflection 在外部库上使用可反射的省道
我需要在第三方lib上使用reflectable,但它不起作用 考虑以下情况: 库A具有反射器声明:Reflection 在外部库上使用可反射的省道,reflection,dart,dart-mirrors,Reflection,Dart,Dart Mirrors,我需要在第三方lib上使用reflectable,但它不起作用 考虑以下情况: 库A具有反射器声明: class Reflector extends Reflectable { const Reflector() : super(invokingCapability, typeRelationsCapability, metadataCapability, superclassQuantifyCapability,
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
将某个反射器与某个目标类关联,而无需编辑包含目标类的文件)