Как я могу создать приложение для Windows (C #), в котором я могу отображать все исключения в различных объектах в окне сообщения - PullRequest
1 голос
/ 11 сентября 2009

Я пытаюсь использовать MVC в C #. Таким образом, контроллер формы использует экземпляр класса аутентификации. Я обрабатываю неверные учетные данные в классе аутентификации. Но я не могу отобразить это сообщение в окне сообщения, поскольку оно отсутствует в экземпляре класса контроллера формы. Пожалуйста, помогите

Ответы [ 2 ]

3 голосов
/ 11 сентября 2009

Разве вы не можете просто выбросить свое исключение в свой класс аутентификации, и ваша основная форма обработает исключение?

// main form
try
{
    User _loggedOnUser = Authenticate.GetLoggedOnUser();
}
catch (AuthenticationException ex)
{
    MessageBox.Show(this, ex.Message, "Unable to authenticate user");
}


// Authenticate class
// ... do something
if (something == true)
    throw new AuthenticationException("User account has been disabled");

В качестве альтернативы, если Исключение не подходит, используйте возвращаемое значение:

// main form
User _loggedOnUser = Authenticate.GetLoggedOnUser();
if (_loggedOnUser == null)
    MessageBox.Show(this, "Unable to authenticate the user");
0 голосов
/ 11 сентября 2009

Итак, у вас есть класс аутентификации, но вы не можете получить доступ к сообщениям об ошибках, если аутентификация не удалась? В этом случае вам придется изменить этот класс для отображения сообщения об ошибке - вы можете добавить свойство, которое возвращает последнюю ошибку аутентификации:

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 к представлению и вызывать его из контроллера, чтобы не связывать контроллер с библиотекой представления.

...