Parsley快速注入实例

当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文档相应部分

发表评论