Итак, у вас есть класс аутентификации, но вы не можете получить доступ к сообщениям об ошибках, если аутентификация не удалась? В этом случае вам придется изменить этот класс для отображения сообщения об ошибке - вы можете добавить свойство, которое возвращает последнюю ошибку аутентификации:
public bool Authenticate(...) { }
public string LastAuthenticationError { get; }
Или вы можете добавить параметр out в метод Authenticate:
public bool TryAuthenticate(..., out string errorMessage) { ... }
Если по какой-либо причине вы не можете изменить этот класс, то все, что вы действительно можете сделать, это отобразить общее сообщение «Ошибка аутентификации».
Единственный способ объяснить этот вопрос - это то, что вы не можете получить доступ к классу MessageBox из контроллера. В этом случае, поскольку MessageBox.Show является статическим, вы можете просто вызвать его, если аутентификация не удалась:
public void Authenticate(...)
{
...
if(! authenticator.Authenticate(...))
{
System.Windows.Forms.MessageBox.Show(errorMessage);
}
}
Однако лучшим способом было бы добавить метод ShowError к представлению и вызывать его из контроллера, чтобы не связывать контроллер с библиотекой представления.