public void BeginStage()
 {
     if (_stage != null)
     {
         throw new NotSupportedException("Before begin new stage you must close a previous one");
     }
     _stage = new SubscriptionStage();
 }
 public void CloseStage()
 {
     foreach (var receiver in _stage.receivers)
     {
         Unregister(receiver);
     }
     foreach (var subscription in _stage.subscriptions)
     {
         foreach (var dDelegate in subscription.Value)
         {
             _subscriptions[subscription.Key].Remove(dDelegate);
         }
     }
     _stage = null;
 }