Parsley依赖注入实例

Parsley很强大,文档API也很丰富,不过网上完整实例太少了。因此我决定结合Parsley文档,用简单实例来讲述Parsley的特性。Parsley支持Flash和Flex,当然更常见的是使用Parsley开发Flex企业应用,我们也主要以讲解Parsley Flex的用法为主。至于Parsley Flash的用法,大家可参考官方文档。本文将用一个类似HelloWorld的简单实例讲述创建Parsley Flex应用的基本流程以及Parsley的依赖注入。如果你使用Flash,你要去看一下相应文档和API。

基本流程

添加框架SWCs

开始用Parsley开发首先你需要添加一些SWCs到你的下。先下载Parsley Core并从release和相关的文件夹下添加所需要的SWCs到你的构建路径下。你会在下载的Zip文件的release文件夹下找到它们。如下图所示:
构建路径库

定义对象依赖

这可能是Parsley使用最频繁的特性。依赖关系可以用元数据标签、MXML、XML或者编程来配置。最简单的是使用[Inject]元数据标签,你可以在属性上使用它,如本实例的代码片段:

[Inject]
public var sharedModel:SharedModel;

Parsley读到[Inject]之后会在当前的上下文中查找是否有托管的对象匹配这里的“SharedModel”类型,如果有它就把托管的对象赋值(注入)给这个变量。

托管对象

在你给类添加元数据标签后,你必须告诉容器哪些对象应该管理。在Flex中用得最多的是使用MXML/XML配置。你可以创建一个简单的MXML类,然后添加所有你希望被Parsley管理的类,一般都是模型类。如本实例的代码片段:

<?xml version="1.0" encoding="utf-8"?>
<parsley:Objects xmlns:fx="http://ns.adobe.com/mxml/2009" 
  xmlns:parsley="http://www.spicefactory.org/parsley" xmlns:model="model.*">
    <fx:Declarations>
      <model:SharedModel/>
    </fx:Declarations>
</parsley:Objects>

“SharedModel”可以是你希望托管的任何对象类型。每个托管对象将由Parsley管理,这样就可以使用Parsley框架的所有功能,包括消息传递、自动的创建销毁、注入等。

装配视图

Parsley不知道视图的注入点,除非我们直接告诉它。要做到这一点,需要将视图直接装配到它的上下文中。最简单的方式就是使用<Configure />标签,该标签表明这个视图是要用Parsley管理的。它会触发一个冒泡事件,Parsley接收到这个事件才会执行对视图的一系列处理。否则注入不会生效。如本实例中的SenderView和ReceiverView都添加了<Configure />标签。

初始化框架

现在,你已经用元数据配置类并且装配到视图中,终于到初始化它的时间了。幸运的是,在大多数情况下,这只需要使用一行代码或一个简单的标签。如本实例的代码片段:

<fx:Declarations>
  <parsley:ContextBuilder config="{AppConfig}"/>
</fx:Declarations>

这就是所有的东西。可以把标签写到任何一个你希望作为上下文的根视图中。在本实例中我们把标签写到MXML入口程序中,其实是创建了application级别的singleton对象。标签有一些选项,最重要的是config选项,它用来指示配置文件的位置。本实例config文件是一个用来描述托管对象的MXML配置文件。使用MXML有一个好处是托管对象一定会被装配到最终的swf中。本实例的工程结构应该是这样的:
构建路径库
点击此处查看该实例最终效果,点击此处下载该实例的源码。

注意要点

  • Parsley除了属性依赖注入,还支持构造方法和普通方法注入。对方法使用[Inject]元数据标签可以一次声明多个依赖关系。
  • 要使注入生效,被注入的属性方法必须是public的。
  • 如果Parsley通过对象ID选择依赖,配置文件中托管对象必须设置唯一的相应ID。通常Inject元数据标签更适用于通过类型注入,而不是通过ID注入,但对于RemoteObject是个例外。
  • 依赖注入是需要时间的,注入的对象可能不能立即使用。甚至在视图creationComplete事件发生后,你的托管对象可能仍然是空的。所以需要使用[Init]元数据标签来指定完成注入后要执行的回调方法。
  • 可以让Parsley自动装配视图而不需要使用<Configure>标签,我们稍后的时候再介绍。
  • 要更多了解Parsley依赖注入,请查看Parsley文档相应部分

发表评论