假设我有以下注释和2个类:
class AppModel extends Reflectable {
final String name;
const AppModel([this.name])
: super(newInstanceCapability, metadataCapability);
}
const appModel = const AppModel();
@appModel
class ImGonnaBePickedUp {
}
@AppModel(' :( ')
class AndImNotPickedUpOnServer_IDoOnWebClient {
}
main() {
appModel.annotatedClasses // that's what I mean by "Picked Up".
}
在CmdApp端(服务器):AndImNotPickedUpOnServer_IDoOnWebClient
中仅提供appModel.annotatedClasses
。
在网络方面,两个类都给出了。
长话短说,我如何检索使用直接const constructor
调用注释的类,如上例@AppModel(' :( ')
(对于CmdApp和Web)?
答案 0 :(得分:2)
因为版本0.5.4
可反映的类不支持带参数的构造函数
这出现在reflectable documentation:
中脚注:1。目前,唯一支持的设置是元数据对象是类[Reflectable]的直接子类的实例,比如说MyReflectable,并且该子类定义了一个带零参数的const构造函数。这确保了用作元数据的Reflectable的每个子类都是单例类,这意味着可以通过在类中生成代码来表达实例的行为。如果引人注目的用例出现,将来可能会支持此设置的概括。
一种可能的解决方案是使用第二个注释来处理名称,例如:
import 'package:reflectable/reflectable.dart';
import 'package:drails_commons/drails_commons.dart';
class AppModel extends Reflectable {
const AppModel()
: super(newInstanceCapability, metadataCapability);
}
const appModel = const AppModel();
class TableName {
final String name;
const TableName(this.name);
}
@appModel
class ImGonnaBePickedUp {
}
@appModel
@TableName(' :( ')
class AndImNotPickedUpOnServer_WorksOnWebClient {
}
main() {
print(appModel.annotatedClasses); // that's what I mean by "Picked Up".
print(new GetValueOfAnnotation<TableName>()
.fromDeclaration(appModel.reflectType(AndImNotPickedUpOnServer_WorksOnWebClient)).name);
}
注意:我也在使用drails_common
package