2016-06-09 2 views
1

Скажем, у меня есть следующие аннотации и 2 классов:Reflectable: myAnnotation.annotatedClasses другой результат CmdApp <> Клиентские

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 стороне (Server): только AndImNotPickedUpOnServer_IDoOnWebClient дается в appModel.annotatedClasses.

На веб-странице приведены оба класса.

Короче говоря, как мне получить классы, аннотированные прямыми const constructor вызовами, как в приведенном выше примере @AppModel(' :(') (как для CmdApp, так и для Web)?

ответ

2

начиная с версией 0.5.4 reflectable классов не поддерживает конструктор с аргументами

Это проявляется в 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