前面的实例我们都是使用<Configure>标签将一个组件直接连接到它所在的上下文中,这就是显式组件装配。这种方式虽然很方便的,但它不是唯一的方法。而且这种方式带来了一个问题:我们不得不为每个要管理的组件类添加配置标签。可不可以使用上下文配置文件来管理这些组件呢?
自动组件装配
答案是肯定的。Parsley具有自动组件装配功能,它让您能够集中配置哪些视图应该管理,哪些视图不应该管理。自动组件装配必须显式地激活。如下面代码片段:
<parsley:ContextBuilder> <parsley:ViewSettings autowireComponents="true"/> <parsley:FlexConfig type="AppConfig" /> </parsley:ContextBuilder>
在ContextBuilder设置ViewSettings的autowireComponents属性值true,然后变可以在上下文配置文件添加
<fx:Declarations> <model:SharedModel/> <parsley:View type="views.SenderView"/> <parsley:View type="views.ReceiverView"/> </fx:Declarations>
现在两个View中可以不使用<Configure>标签了。最终该实例的工程结构应该是这样的:
实际上,该方法只能算是手动装配组件,如果项目中会很多要管理的视图,该方法就不实用了。更简捷有效的做法是使用自定义过滤器,通过编程的方式定义一定规则来自动装配组件。
自定义过滤器
自定义过滤器最简单的方法是扩展DefaultViewAutowireFilter 和覆盖filter 方法。如AutowireFilterSample类所示:
public class AutowireFilterSample extends DefaultViewAutowireFilter { override public function filter(object:DisplayObject):ViewAutowireMode { var fullClassname:String = getQualifiedClassName(object); if (fullClassname.indexOf("views::") == 0) { return ViewAutowireMode.ALWAYS; } else { return ViewAutowireMode.NEVER; } } }
此处的逻辑很简单:如果视图的完全限定类名中包含views就管理该视图。然后在ContextBuilder将ViewSettings的autowireFilter属性值指定为AutowireFilterSample类的实例。上下文配置文件中就可以不需要配置视图了。Parsley-AutowireFilter实例的工程结构应该是这样的:
要更多了解Parsley自动组件装配,请查看Parsley文档相应部分。