当 Parsley 将组件装配到上下文,Parsley 会通过反射仔细查看该组件(检查所有它的属性,而不是值)并进行识别,不只是通过组件名,还包括它的定义和构成。Parsley 能检查注入接口,它知道是什么类实际上实现了该接口。然而大型应用中需要连接许多复杂组件,Parsley 对所有管理对象和组件进行反射操作代价很大,这时 FastInject 就派上用场了。FastInject 允许无反射注入。换句话说,你仍然可以在视图注入管理对象,而组件不会连接到上下文中,因此不付出反射造成的性能代价。
用法
怎样使用快速注入呢?
很简单,在任何 MXML 组件,只需将 <FastInject>
标签放置在想要注入的公有属性进行声明。
public var sharedModel:SharedModel;
再设置快速注入的 property 和 type
属性。如本实例中 ReceiverView.mxml
代码片段:
<fx:Declarations>
<parsley:FastInject property="sharedModel" type="{SharedModel}"/>
</fx:Declarations>
这就搞定了。现在 Parsley 托管的 SharedModel 对象将被注入到本地 sharedModel
属性,视图组件 ReceiverView 不会进行反射操作。
既然使用 FastInject 时组件没有连接到上下文,你将不能使用生命周期方法。但 <FastInject>
标签有类似于 Flex 组件的事件,比如 creationComplete
和 addedToStage
,但是不同的是这些事件只有当对应的组件派发了事件并且注入已经完成后才会派发。所以我们需要使用这些事件为初始化该组件找到合适的时机。如本实例中 ReceiverView.mxml
代码片段:
<fx:Script>
<![CDATA[
import model.SharedModel;
[Bindable]
public var sharedModel:SharedModel;
protected function creationCompleteHandler(event:Event):void
{
lbl.text = "Hello, Guest";
}
]]>
</fx:Script>
<fx:Declarations>
<parsley:FastInject property="sharedModel" type="{SharedModel}"
creationComplete="creationCompleteHandler(event)"/>
</fx:Declarations>
如果你想在所有注入完成的时候执行一些动作,可以把他们组合到一个单独的父标签内。
点击此处下载该实例的源码。
注意
- 因为组件没有连接到上下文中,FastInject 不能享有 Parsley 所有的功能,比如说事件消息传递:虽然可以派发,但无法进行消息处理。
- 一般关注性能想避免组件自己被连接到上下文才使用 FastInject。在非视图中使用 Inject 并不比使用 FastInject 消耗更多性能时间,前者使用起来更方便。
- 与自动组件装配一样,使用了快速注入的视图不需要再使用
<Configure>
标签来显式声明组件装配。 - 要更多了解 Parsley 自动组件装配,请查看 Parsley 文档相应部分。
评论 (0)