ModuleMessageInterceptor vs MessageInterceptor.
-
12-11-2019 - |
質問
Cairngormモジュールライブラリとパセリを使用してFlexにアプリケーションを開発しています。
Parsley Modimation第5章「メッセージがハンドラに渡すべきかどうかを決定したい場合は迎撃機は便利な場合があります。
ModuleMessageInterceptorを使用する場合、上記は真実ではありません。つまり、MessageHandlerはMessageInterceptorの前にメッセージを受信します。
誰もが仕事を知っていますか?
wantes、
Fadi
解決
この問題に対する解決策は、次のようにModuleMessageInterceptorクラスを拡張していました:
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;
}
}
}
.
上記をすることで、私たちが持っていた問題を解決するModuleMessageInterceptorに注文プロパティを追加しました。
wantes、
Fadi Mansour
他のヒント
Parsley 2.4では、MessageInterceptorsは除算されました:
とModuleMessageInterceptorはパセリなことではありません、それはケアンゴームのものです。個人的には、私の経験のために完全にケアンゴームから泊まります。オンラインで見ると、その他の人が同様の問題を持っていました。あなたの最善の策は同じフォーラムを投稿し、誰かが役立つことを願っています。
所属していません StackOverflow