2013-08-22 4 views
12

У меня есть ViewModel, который, в конструкторе, делает вызов метода асинхронные ничтожным, чтобы добавить к коллекцииRhino Mock Заглушка Асинхронного Метод

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); 
    } 
} 

Как точно бы я окурок команды _commandHandler.ExecuteGetReply() возвращать значение ?

Кроме того, хорошо ли иметь такую ​​функцию в конструкторе, чтобы сделать что-то вроде этого? Или, возможно, это возможно ... override void OnActivate() call (я использую Caliburn Micro)?

ответ

19

ICommandHandler.ExecuteGetReply появляется вернуть Task<Response>, так что вы можете сделать что-то вроде:

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

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

+0

Что произойдет, если 'commandHandler.ExecuteGetReply' выдает исключение? –

Смежные вопросы