/// <summary> /// Intercept messages and signals for a <see cref="Behavior{TMessage}"/> by first passing them to a <see cref="IBehaviorInterceptor{TOuter,TInner}"/>. /// /// When a behavior returns a new behavior as a result of processing a signal or message and that behavior already contains /// the same interceptor, only the innermost interceptor is kept. This is to protect against stack overflow when recursively defining behaviors. /// </summary> public static Behavior <TOut> Intercept <TOut, TIn>(this Behavior <TIn> behavior, IBehaviorInterceptor <TOut, TIn> interceptor) where TIn : class where TOut : class { return(new DeferredBehavior <TOut>(context => { var i = new Interceptor <TOut, TIn>(interceptor, behavior); return i.PreStart(context); })); }
public Interceptor(IBehaviorInterceptor <TOut, TIn> interceptor, Behavior <TIn> behavior) { _interceptor = interceptor; _behavior = behavior; }