我试图在dart中调用一个对象的方法,使用dart:mirrors进行镜像 . 我想要使用的对象是一个类的实例,它在另一个文件的库中定义 .
main.dart
import 'dart:mirrors';
main(List<String> args) {
var libName = args[0];
var className = args[1];
var methodName = args[2];
MirrorSystem mirrors = currentMirrorSystem();
LibraryMirror lm = mirrors.findLibrary(new Symbol(libName));
ClassMirror cm = lm.declarations[new Symbol(className)];
InstanceMirror im = cm.newInstance(new Symbol(''), []);
im.invoke(new Symbol(methodName), []);
}
我写了另一个文件进行测试:
test.dart
library test;
class TestClass {
doStuff() => print("doStuff was called!");
}
如果我运行main.dart,我会得到一个例外:
dart main.dart test TestClass doStuff
Unhandled exception:
Exception: There is no library named 'test'
...
我可以在 main.dart 中添加库的import语句,一切都很好
import 'test.dart';
但我只在运行时知道库的名称 .
如何在运行时导入库或是否有不同的方法?
1 回答
直到有一个更好的解决方案,我使用一个简单的解决方法 . 我调用另一个程序,它将所有必要的导入添加到我的主文件并执行它:
由于我正在编写一个命令行应用程序,这不是太糟糕 .