2013-08-22 18 views
12

Mam ViewModel, które w konstruktorze, sprawia, że ​​wywołanie metody asynchronicznej void dodać do kolekcjiRhino Mock Stub asynchroniczny Metoda

public MyViewModel(ICommandHandler commandHandler) 
{ 
    _commandHandler = commandHandler; 
    SetupCollection(); 
} 


private async void SetupCollection() 
{ 
    var commands = GetCommands(); 

    foreach (var command in commands) 
    { 
     var response = await _commandHandler.ExecuteGetReply(command); 

     if (response != null) 
      Response.Add(response); 
    } 
} 

Jak dokładnie bym skrótową komendy _commandHandler.ExecuteGetReply() zwrócić wartość ?

Czy to jest w porządku mieć taką funkcję w konstruktorze, aby zrobić coś takiego? A może to powinno być w granicach ... override void OnActivate() połączenia (używam Caliburn Micro)?

Odpowiedz

19

ICommandHandler.ExecuteGetReply wydaje się zwracać Task<Response> więc można zrobić coś takiego:

ICommand commandArg; 
Response response; 
stubHandler.Stub(h => h.ExecuteGetReply(commandArg)).Return(Task.FromResult(response)); 

Nie nazwałbym metodę void asynchronicznej z konstruktora jednak, ponieważ nie będzie miał sposób bycia powiadomiony, gdy ma zakończony.

+0

Co się stanie, jeśli 'commandHandler.ExecuteGetReply' zgłasza wyjątek? –