在外部库上使用省道反射



我需要在第三方库上使用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类。构建警告"反射器"。dart:这个反射器不匹配任何东西"

如果我执行"print(reflector.annotatedClasses);",它会在控制台中打印[]。

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

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

转换器能够查找程序中的任何声明,因此,如果程序中有一个库正在导入库B(因此也导入库a),那么转换器当然应该能够为class whateverz生成镜像,并且您应该在reflector.annotatedClasses中找到该镜像。

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

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

你可以查看three_files_test。请查看一个小示例,其中使用一个文件中的反射器来注释不同文件中的类,您可以查看meta_reflectors_test。来看看如何解耦反射器、目标类和其他元素,甚至更多(例如,通过使用GlobalQuantifyCapability将特定反射器与特定目标类关联起来,而无需编辑包含目标类的文件)。

相关内容

  • 没有找到相关文章

最新更新