FastInject在Parsley中没有检测到objectId

时间:2013-04-04 06:07:17

标签: flex dependency-injection inject parsley

我刚刚开始使用Parsley,我遇到了这个问题。问题是我的项目中有一个自定义组件,由Parsley“配置”并有一段代码如下:

<fx:Script>
<![CDATA[
            ...
            [Inject(id="dateFormatter")]
            [Bindable] public var dateFormatter:DateFormatter;
            ...
]]>
</fx:Script>

<fx:Declarations>
<parsley:Configure />
</fx:Declarations>

我的问题是我不希望Parsley完全配置组件。我想在MXML中使用FastInject,而不是使用Configure,例如:

<parsley:FastInject objectId="dateFormatter" property="dateFormatter" type="{DateFormatter}" />

根据我在网上搜索时发现的情况,objectId中的FastInject[Inject(id="dateFormatter")]相同。这是source。如果我错了,请纠正我:)。

但是当我使用它时,我遇到以下错误:  Error: More than one object of type mx.formatters::DateFormatter was registered

这是否意味着正在注入的财产的ID未被提取?当我配置整个组件并使用Inject meta-tag时,它工作正常,但我不想配置整个组件。

有人可以建议解决方案吗?

2 个答案:

答案 0 :(得分:1)

如果在上下文中声明的对象具有id。

,则id的FastInject可以正常工作

上下文配置

<fx:Declarations>
    <foo:FooBar1 />
    <foo:FooBar2 id="fooBar2" />
</fx:Declarations>

组件中的FastInject

<fx:Declarations>
    <parsley:FastInject injectionComplete="handlerInjectComplete(event)">
        <parsley:Inject property="foobar1" type="{FooBar1}" />
        <parsley:Inject property="foobar2" objectId="fooBar2"/>
    </parsley:FastInject>
</fx:Declarations>
<fx:Script>
    <![CDATA[
        [Bindable]
        public var foobar1:FooBar1;
        [Bindable]
        public var foobar2:FooBar2;

        protected function handlerInjectComplete(event:Event):void
        {
            if(foobar1) trace("foobar1 available");
            if(foobar2) trace("foobar2 available");
    }
    ]]>
</fx:Script>

这适合我。

答案 1 :(得分:0)

Parsley FastInject在从A类继承B并想要通过id注入两者时会感到困惑,同时指定类型。

您只需要使用FastInject

的objectId / type属性之一