2016-06-15 3 views

ответ

1

Существует в настоящее время не способ устранить действие, но вы можете поставить его в очередь в различных способов, которые позволят вам, чтобы остановить его работу.

Первый вариант - использовать внешнее действие, а затем изменить его на более поздний момент времени.

// Clear action manually 
Action<string> action = x => SideEffect(); 
sub.Foo(Arg.Do<string>(x => action(x))); 
// ... 
action = x => { }; 

Вариант такого подхода может позволить вам изменить действие автоматически ясно само по себе (в качестве альтернативы можно было бы использовать пункт охраны, чтобы убедиться, что он работает только необходимое количество раз):

// Self-clearing action (run once): 
Action<string> action = x => 
{ 
    SideEffect(); 
    action = _ => { }; 
}; 
sub.Foo(Arg.Do<string>(x => action(x))); 

Другой вариант - использовать Callback builder. Это работает с When..Do, а не Arg.Do, но дать вам немного контроля над тем, как различные последовательности действий могут быть в очереди (см documentation на более сложный пример):

// Callback builder: 
// (See) 
sub.When(x => x.Foo(Arg.Any<string>())) 
    .Do(Callback.First(call => SideEffect())); 
Смежные вопросы