Ausnahmebehandlung
Die RuleEngine-Klasse verfügt über die Eigenschaft CompensationHandlerInfo, die wiederum über zwei Eigenschaften verfügt: CompensationHandler und UserData. Die CompensationHandler-Eigenschaft ist vom Typ RuleEngineCompensationHandler, und die UserData-Eigenschaft ist vom Typ Object. Die Definition für RuleEngineCompensationHandler lautet wie folgt:
public delegate bool RuleEngineCompensationHandler(
Exception ex,
object userData
);
Der Regel-Engine-Consumer gibt den Handler und die Benutzerdaten für die Regel-Engine an, indem er die CompensationHandlerInfo-Eigenschaft der RuleEngine-Klasse verwendet. Der Handler muss dieselbe Signatur wie der RuleEngineCompensationHandler-Delegat aufweisen. Im Fall einer Laufzeitausnahme ruft die Engine den Handler auf und übergibt die Ausnahme und die vordefinierten Benutzerdaten als Parameter an den Handler. Wenn der Handler zurückgibt true
, setzt die Regel-Engine die Verarbeitung fort. Andernfalls bricht die Regel-Engine die Verarbeitung ab und gibt die ursprüngliche Ausnahme an den Benutzer zurück. Wie Sie sehen können, können Sie diesen Ausnahmebehandlungsmechanismus nur verwenden, wenn Sie die Richtlinie mithilfe der RuleEngine.Execute-Methode aufrufen.
Wenn Sie die Policy.Execute-Methode zum Ausführen einer Richtlinie verwenden, müssen Sie einen try-catch-Block verwenden, um alle Ausnahmen abzufangen, die während der Ausführung der Richtlinie von der Regel-Engine generiert wurden.
Wenn Sie das Shape Aufrufregeln verwenden, um eine Richtlinie auszuführen, verwenden Sie den Block Catch Exception für das Shape Bereich , um eine Ausnahme abzufangen, die während der Ausführung der Richtlinie von der Regel-Engine ausgelöst wird.