Pregunta

Estoy desarrollando una aplicación en Flex usando la Biblioteca de Módulos de Cairngorm y Parsley.

Documentación de perejil Capítulo 5 dice: "Los interceptoradores pueden ser útiles cuando desee decidir si el mensaje debe ser aprobado o no a los manipuladores".

Cuando use el ModuleMessageInteperceptor, lo anterior no es cierto.Lo que significa que mi Mensaje Mandhandler recibe el mensaje antes del MessageInteperceptor.

¿Alguien sabe un trabajo alrededor?

Saludos,

fadi

¿Fue útil?

Solución

La solución a este problema estaba extendiendo la clase MODULEMESSAsageInteptor de la siguiente manera:

package fr.core.patch.cairngorm
{
    import com.adobe.cairngorm.module.ModuleIdMetadata;
    import com.adobe.cairngorm.module.ModuleMessageDispatcher;
    import com.adobe.cairngorm.module.ModuleMessageInterceptor;
    import com.adobe.cairngorm.module.ParsleyModuleMessage;

    import flash.system.ApplicationDomain;

    import org.spicefactory.lib.reflect.ClassInfo;
    import org.spicefactory.lib.reflect.Property;
    import org.spicefactory.parsley.core.registry.ObjectDefinitionRegistry;
    import org.spicefactory.parsley.core.registry.RootObjectDefinition;
    import org.spicefactory.parsley.tag.messaging.MessageHandlerDecorator;
    import org.spicefactory.parsley.tag.messaging.MessageInterceptorDecorator;

    public class ATPModuleMessageInterceptor extends ModuleMessageInterceptor
    {
        public function ATPModuleMessageInterceptor()
        {
            super();
        }

        public var order:int;

        private var target:Property;

        override public function process(registry:ObjectDefinitionRegistry):void
        {
            target=getModuleIdTargetProperty(registry.domain);

            var interceptor:MessageInterceptorDecorator=new MessageInterceptorDecorator();
            interceptor.type=type;
            interceptor.selector=selector;
            interceptor.method="interceptModuleMessage";
            interceptor.order = order;

            var messageHandler:MessageHandlerDecorator=new MessageHandlerDecorator();
            messageHandler.type=ParsleyModuleMessage;
            messageHandler.method="parsleyModuleMessageHandler";

            var definition:RootObjectDefinition=registry.builders.forRootDefinition(ModuleMessageDispatcher).decorators([interceptor, messageHandler]).buildAndRegister();

            definition.constructorArgs.addValue(target);

            if (moduleRef)
            {
                definition.constructorArgs.addIdReference(moduleRef);
            }
        }

        private function getModuleIdTargetProperty(domain:ApplicationDomain):Property
        {
            var props:Array=ClassInfo.forClass(type, domain).getProperties();

            for each (var prop:Property in props)
            {
                if (prop.hasMetadata(ModuleIdMetadata))
                {
                    return prop;
                }
            }

            return null;
        }
    }
}

Al hacer lo anterior, hemos agregado la propiedad de pedido al ModuleMessageInteperceptor que resuelve el problema que tenía.

Saludos,

fadi mansour

Otros consejos

en Parsley 2.4, MessageIntercorspors ha sido despracado:

y moduleMessageInteperceptor no es una cosa de perejil, es una cosa de Cairngorm.Personalmente, me mantendría alejado de Cairngorm por completo por mi experiencia con ella.Después de mirar en línea, vi eso Otras personas tenían problemas similares .Su mejor apuesta es publicar en el mismo foro y espera que alguien ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top