gpt4 book ai didi

reflection - 在外部lib上使用可反射的dart

转载 作者:行者123 更新时间:2023-12-03 03:43:23 24 4
gpt4 key购买 nike

我需要在第三方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中的whatz类上使用反射。

我的问题是,可反射的库看不到注释的whatz类。生成警告“reflector.dart:此反射器不匹配”

如果我做“print(reflector.annotatedClasses);”它在控制台中打印[]。

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

最佳答案

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

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

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

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

您可以 checkout three_files_test.dart来查看一个小例子,其中一个文件中的反射器用于注释不同文件中的类,并且您可以 checkout meta_reflectors_test.dart来查看如何进一步分离反射器,目标类和其他元素(例如,通过使用GlobalQuantifyCapability将某个反射器与某个目标类相关联,而无需编辑包含该目标类的文件)。

关于reflection - 在外部lib上使用可反射的dart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40453569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com