在 hexMachina 中使用自定义注解
Use custom annotation in hexMachina
我尝试在 hexMachina 中使用自定义注释。
在一个模块中,我注册了我的元数据:
this._annotationProvider.registerMetaData("Url", this.urlProviderModel.getUrl)
并在命令中,在宏中执行:
@Url("applicationConfig")
public var applicationConfigUrl:String;
宏在上下文中执行:
<state id="assemblingEnd" ref="applicationContext.state.ASSEMBLING_END">
<enter command-class="app.adapter.bootstrap.BootstrapMacro" fire-once="true"/>
</state>
applicationConfigUrl 为空
少了什么?
AnnotationProvider 根据域引用提供数据。
在前面的示例中,metadata is registered on module's domain,并且 BootstrapMacro 实例是从主应用程序上下文的域(其父级)执行的。
为了解决这个问题,我已经将注解注册到 TopLevelDomain 中:
AnnotationProvider.getAnnotationProvider().registerMetaData("Url", urlProviderModule.getUrlFunction());
通过这种注册,注释将对每个域可用。这是因为 AnnotationProvider API 为所有子域的每次注册提供自动继承,并具有级联效果(子级的子级......)。
只是一个快速补充,也可以从您的主要上下文进行注册,而无需定位顶级域。
AnnotationProvider.getAnnotationProvider( context.getDomain() ).registerMetaData("Url", urlProviderModule.getUrlFunction());
单元测试有助于理解行为。他们可用 here.
我尝试在 hexMachina 中使用自定义注释。
在一个模块中,我注册了我的元数据:
this._annotationProvider.registerMetaData("Url", this.urlProviderModel.getUrl)
并在命令中,在宏中执行:
@Url("applicationConfig")
public var applicationConfigUrl:String;
宏在上下文中执行:
<state id="assemblingEnd" ref="applicationContext.state.ASSEMBLING_END">
<enter command-class="app.adapter.bootstrap.BootstrapMacro" fire-once="true"/>
</state>
applicationConfigUrl 为空
少了什么?
AnnotationProvider 根据域引用提供数据。
在前面的示例中,metadata is registered on module's domain,并且 BootstrapMacro 实例是从主应用程序上下文的域(其父级)执行的。
为了解决这个问题,我已经将注解注册到 TopLevelDomain 中:
AnnotationProvider.getAnnotationProvider().registerMetaData("Url", urlProviderModule.getUrlFunction());
通过这种注册,注释将对每个域可用。这是因为 AnnotationProvider API 为所有子域的每次注册提供自动继承,并具有级联效果(子级的子级......)。
只是一个快速补充,也可以从您的主要上下文进行注册,而无需定位顶级域。
AnnotationProvider.getAnnotationProvider( context.getDomain() ).registerMetaData("Url", urlProviderModule.getUrlFunction());
单元测试有助于理解行为。他们可用 here.