2011-05-12 2 views
1

Je développe une application dans Flex en utilisant la bibliothèque de modules cairngorm et Parsley.ModuleMessageInterceptor vs MessageInterceptor

La documentation de persil chapitre 5 indique: "Les intercepteurs peuvent être utiles lorsque vous voulez décider si le message doit ou non être transmis aux gestionnaires". Lors de l'utilisation de ModuleMessageInterceptor, ce qui précède n'est pas vrai. Ce qui signifie que mon MessageHandler reçoit le message avant le MessageInterceptor.

Est-ce que quelqu'un connaît un travail?

Cordialement,

Fadi

+0

version de persil? –

Répondre

1

La solution à ce problème a été d'étendre la classe ModuleMessageInterceptor comme suit:

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; 
     } 
    } 
} 

En faisant ce qui précède, nous avons ajouté la propriété pour la ModuleMessageInterceptor qui résolvent le problème que j'avais.

Cordialement,

Fadi Mansour

0

persil 2.4, MessageInterceptors ont été depracated:

Et ModuleMessageInterceptor n'est pas une chose Persil, il est une chose Cairngorm. Personnellement, je resterais complètement à l'écart de Cairngorm à cause de mon expérience. Après avoir regardé en ligne, j'ai vu que other people had similar issues. Votre meilleur pari est de poster sur le même forum et espère que quelqu'un aide.

+0

La solution à ce problème consistait à étendre la classe ModuleMessageInterceptor comme suit: – user751037