岳兵
摘要:该文研究了Parsley框架的依赖注入在Flex开发中的应用,重点讨论Parsley框架在Flex开发中的配置以及各种依赖注入的方式。
关键词: Parsley框架;Flex;依赖注入
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)28-6672-02
在面向对象的软件设计过程中,软件各个功能是通过对象之间的协作来完成,并且这些对象是在软件的组件模块中实例化,这样做的后果导致组件与组件以及组件与自己内部对象之间的高度紧密耦合,同时造成软件很难被维护以及不利于软件组件独立的进行测试。此时通过依赖注入技术,可以把对象直接注入到程序里面,而不需要在程序中实例化这些对象,并且对象在被注入前可以独立的进行测试。在基于Flex开发的富因特网应用程序中,Parsley框架就是常见的依赖注入框架,并且得到了Adobe官方的推荐。该文主要研究讨论Parsley框架中的依赖注入技术在Flex开发中的应用。
1 依赖注入的简述
依赖注入最初由Martin Fowler描述的一种设计模式。所谓依赖注入,是指程序运行过程中,如果需要調用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。目的是达到软件组件之间的解耦,降低各层的依赖性,提高软件组件的灵活性、可重用性以及可扩展性,减少不必要的重复性开发工作,最终达到降低软件开发成本。
2 Parsley框架的概述
Parsley 是一个专门为Flex 和Flash 设计的IOC 容器和消息框架,使用它可以创建高解耦的构架,它允许你用Metadata、MXML、XML来配置对象,对象由一个容器来统一管理,而且Parsley是非常容易扩展的。基于Flash平台的依赖注入框架,有些是基于纯Flex SDK开发的,不能脱离Flex SDK而独立存在;还有一些框架是基于ActionScript开发的,能独立于Flex SDK而存在,但是又不能Flex SDK深度集成。但是Parsley 两者的功能都兼备,该框架的核心是基于IOC 容器与消息子系统,并不依赖于Flex SDK ,同时部分额外的功能模块是专为Flex 设计的, 为MXML 配置、视图注入依赖对象和Flex 模块开发提供了良好的支持。
3 Parsley框架在FLEX开发中的配置以及初始化流程
1) 首先把Parsley框架的核心库文件拷贝至工程项目的libs目录中,并让项目引用这些库文件。
2) 其次在项目的默认包中建立MXML格式的配置文件,该文件中可以直接以
3) 最后在FLex项目主文件内加上Parsley的Configure、 ContextBuilder、FlexConfig标签,初始化Parsley的配置文件,加载IOC容器和消息子系统。样例代码如下:
Configure标签的作用是为了在视图组件中实现对象的依赖注入,而FlexConfig标签的作用是在Flex主文件加载配置文件。xxxConfig为去掉mxml后缀的配置文件。
4 Parsley框架依赖注入的五种方式
1) 构造器注入方式:直接把[InjectConstructor]元标签放在类的声明上面来告诉Parsley框架产生构造器方式的注入。之所以要把该元标签放在类声明上面,是因为目前的Flash虚拟机会忽略构造方法上面的元标签。
[InjectConstructor]
class UserLoginDao {
private var service:LoginService;
public function UserLoginDao(service:LoginService) {
this.service = service;}}
2) 方法注入方式:将[Inject] 元标签放到声明方法之前。
class UserLoginDao {
private var service:LoginService;
[Inject] public function initLoginService (service:LoginService) :void{
this.service = service;}}
3) 类型属性注入方式:将[Inject]元标签放到一个变量声明或属性方法之前,无需同时在变量或属性方法上面使用该元标,只需在其中一个上面使用即可。
class UserLoginDao {
[Inject]private var service:LoginService;
/*[Inject] public set service (service:LoginService) :void{
this.service = service;
}*/}
4) 根據ID属性来注入:在配置文件中,托管的对象需声明一个对应的ID属性。此时注入就直接根据ID来注入依赖,而不再根据类型来注入。
class UserLoginDao {
[Inject(id=” loginService”)] private var service:LoginService;}
5) 直接在配置文件中声明依赖关系,此时可不用在类的方法或属性前面加上[Inject]元标签。
5 结束语
通过在FLEX开发中使用Parsley框架的依赖注入技术,实现了对象的动态注入,使软件各层得到解耦,提升软件开发的灵活性,同时也达到降低软件开发和维护成本的目的。
参考文献:
[1] Shivprasad, koirala, Design, pattern. Inversion of control and Dependency injection[EB/OL]. http://www.codeproject.com/KB/aspnet/IOCDI.aspx.
[2] Martin, Fowler. Inversion of Control Containers and the Dependency Injection pattern[EB/OL]. http://www.martinfowler.com/articles/injection.html.
[3] Paul.IoC Types[EB/OL]. http://docs.codehaus.org/display/PICO/IoC+Types.