Петрушка автопроводка не работает - PullRequest
0 голосов
/ 12 марта 2012

Я начинаю с Петрушки и не могу заставить работать автопровод. Моя конфигурация основана на flex 4.5 и parsley 3.0.0.

Мое приложение содержит следующий bootrap:

<fx:Declarations> 
    <parsley:ViewSettings autowireComponents="true"/> 
    <parsley:ContextBuilder config="{SimulateurConfig}" /> 

    <s:TraceTarget 
            includeCategory="true" 
            includeLevel="true" 
            includeTime="true" 
            level="{LogEventLevel.DEBUG}" 
            > 
        <s:filters> 
            <fx:String>org.spicefactory.parsley.*</fx:String> 
        </s:filters> 
    </s:TraceTarget> 
</fx:Declarations>

Конфигурация довольно проста:

<fx:Declarations> 
    <View type="com.coach.ui.PanelAFinancer"/> 
    <Object type="com.coach.domain.AFinancer" /> 
</fx:Declarations> 

А моя панель содержит:

<fx:Script><![CDATA[ 
    import com.coach.domain.AFinancer; 

    [Bindable] [Inject] 
    public var model:AFinancer; 
    ]]></fx:Script> 


<s:Label text="Model injected? { model != null }"/> 

Я думаю, что все сделал правильно, но модель не вводится на мой взгляд. Трассировка указывает:

[trace] 12:49:12.186 [INFO] org.spicefactory.parsley.core.state.manager.impl.DefaultGlobalDomainManager Using new ApplicationDomain for key [object _Flex_simulateur_mx_managers_SystemManager] 
[trace] 12:49:12.218 [INFO] org.spicefactory.parsley.core.view.impl.DefaultViewManager Add view root: Flex_simulateur0/Flex_simulateur 
[trace] 12:49:12.218 [INFO] org.spicefactory.parsley.core.bootstrap.impl.DefaultBootstrapManager Creating Context [Context(FlexConfig{SimulateurConfig})] without parent 
[trace] 12:49:12.296 [INFO] org.spicefactory.parsley.core.lifecycle.impl.DefaultManagedObjectHandler Configure managed object with [ObjectDefinition(type = com.coach.domain::AFinancer, id = _SimulateurConfig_MxmlRootObjectTag1)] and 0 processor(s) 

Нет признаков обработки представления.

Если я добавлю «ручную настройку» на панель:

<fx:Declarations> 
    <sf:Configure/> 
</fx:Declarations> 

Впрыск работает:

[trace] 12:56:04.983 [INFO] org.spicefactory.parsley.core.state.manager.impl.DefaultGlobalDomainManager Using new ApplicationDomain for key [object _Flex_simulateur_mx_managers_SystemManager] 
[trace] 12:56:05.015 [INFO] org.spicefactory.parsley.core.view.impl.DefaultViewManager Add view root: Flex_simulateur0/Flex_simulateur 
[trace] 12:56:05.030 [INFO] org.spicefactory.parsley.core.bootstrap.impl.DefaultBootstrapManager Creating Context [Context(FlexConfig{SimulateurConfig})] without parent 
[trace] 12:56:05.124 [INFO] org.spicefactory.parsley.core.lifecycle.impl.DefaultManagedObjectHandler Configure managed object with [ObjectDefinition(type = com.coach.domain::AFinancer, id = _SimulateurConfig_MxmlRootObjectTag1)] and 0 processor(s) 
[trace] 12:56:05.140 [DEBUG] org.spicefactory.parsley.core.view.handler.ViewConfigurationHandler Process view 'Flex_simulateur0.ApplicationSkin3._ApplicationSkin_Group1.contentGroup.viewRoot.PanelAFinancer7' with [Context(FlexConfig{SimulateurConfig})] 
[trace] 12:56:05.155 [INFO] org.spicefactory.parsley.core.lifecycle.impl.DefaultManagedObjectHandler Configure managed object with [ObjectDefinition(type = com.coach.ui::PanelAFinancer, id = _SimulateurConfig_MxmlViewTag1)] and 1 processor(s) 
[trace] 12:56:05.155 [DEBUG] org.spicefactory.parsley.core.lifecycle.impl.DefaultManagedObjectHandler Applying [Property(name=[Property model in class com.coach.ui::PanelAFinancer],value={ImplicitTypeReference(type=undefined)})] to managed object with [ObjectDefinition(type = com.coach.ui::PanelAFinancer, id = _SimulateurConfig_MxmlViewTag1)] 
[trace] 12:56:05.171 [DEBUG] org.spicefactory.parsley.core.view.processor.DefaultViewProcessor Add view 'Flex_simulateur0.ApplicationSkin3._ApplicationSkin_Group1.contentGroup.viewRoot.PanelAFinancer7' to [Context(FlexConfig{SimulateurConfig})] 

Обходной путь довольно тяжелый, так как требует добавления во все мои представления проприетарных тегов.

Есть идеи, что не так с моей конфигурацией?

1 Ответ

0 голосов
/ 12 марта 2012

Я бы порекомендовал вам использовать другое решение.Когда вы конфигурируете (или подключаете) представление, Parsley должен отразить класс и пройтись по всем свойствам, чтобы найти точки внедрения.Это дорого и требует много времени.Это может быть хорошо только для нескольких проводных представлений, но обычно это не так, поскольку, если вы используете Flex и Parsley, есть большая вероятность, что у вас будет много представлений.

Лучший подходзаключается в создании всех моделей, презентаторов, служб и т. д. в конфигурации петрушки, за исключением всех видов.В представлениях вам нужно будет использовать тег FastInject как таковой:

<fx:Declarations>
    <spicefactory:FastInject property="model" type="{AFinancer}" /> 
</fx:Declarations>
<fx:Script><![CDATA[ 
    import com.coach.domain.AFinancer; 

    [Bindable]
    public var model:AFinancer; 
]]></fx:Script> 

Это гораздо лучший подход, поскольку отражение не требуется.Единственная «проблема» в том, что вы не можете использовать метаданные Parsley в своих представлениях, что лучше для отделения бизнес-задач от представления.Это также поможет вам повторно использовать докладчиков в вашем приложении и помочь с тестированием этих докладчиков.

...