示例#1
0
 /// <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);
     }));
 }
示例#2
0
 public Interceptor(IBehaviorInterceptor <TOut, TIn> interceptor, Behavior <TIn> behavior)
 {
     _interceptor = interceptor;
     _behavior    = behavior;
 }