我正在为如何在dart中调用顶级函数而苦苦挣扎。我希望能够用@Route注释函数,找到所有的Route注释,然后检查注释是否在某个方法上,然后通过它的符号调用该方法。
到目前为止,我所拥有的是:
class Route {
final String url;
const Route(this.url);
}
@Route('/')
void handle() {
print('Request received');
}
void main() {
var mirrorSystem = currentMirrorSystem();
var lm = mirrorSystem.isolate.rootLibrary;
for (var mirror in lm.declarations.values) {
var metadata = mirror.metadata;
for (var im in metadata) {
if (im.reflectee is Route) {
print('Route found');
// how to invoke the function handle associated with the route annotation?
}
}
}
}从这一点上,我不确定我将如何调用该方法。如果它是一个类,那么我可以使用invoke并传入该方法的Symbol,但这不起作用,因为它不是一个类。
有人能给我一些线索吗?不幸的是,关于dart中的镜像库的信息相当稀少。
发布于 2021-05-21 05:59:10
我解决了这个问题。对于找到此代码的任何人,您可以使用rootLibrary上的LibraryMirror来调用顶级函数:
void main() {
var mirrorSystem = currentMirrorSystem();
var lm = mirrorSystem.isolate.rootLibrary;
for (var mirror in lm.declarations.values) {
var metadata = mirror.metadata;
for (var im in metadata) {
if (im.reflectee is Route && mirror is MethodMirror) {
lm.invoke(mirror.simpleName, []);
// prints 'Request received'
}
}
}
}https://stackoverflow.com/questions/67628214
复制相似问题