Хорошо, поэтому я пытаюсь установить веб-приложение на сервере в другом учреждении нашей компании и столкнулся с проблемой, которую пытаюсь диагностировать. Я получаю печально известное сообщение об ошибке DI «требуется конструктор без параметров», что и отражается в Application_Error в Global.asax.
Я не могу сейчас отладить удаленно, поэтому я бы хотел собрать вместе некоторые базовые, но более подробные способы обработки исключений, которые могут помочь мне понять, что такое настоящее исключение. Есть ли что-нибудь быстрое и простое, что я могу сделать, чтобы получить более подробную информацию об исключении Application_Error?
Итак, чтобы проверить это самостоятельно, я изменил строку подключения, чтобы иметь неверный пароль. Это вызывает исключение SqlException «Ошибка входа для пользователя« xxxxxxxx »». В настоящее время я не занимаюсь обработкой исключений по всему проекту, так как до сих пор не дошел до этого. Я пытаюсь понять, как я могу каким-то образом перенести мои исключения из моих проектов данных / сервисов в веб-проект, чтобы я мог, по крайней мере, увидеть некоторые подробности из браузера, когда я пытаюсь решить проблему при установке.
Первый вызов базы данных в значительной степени имеет стек вызовов, например,
StructureMap DoGetInstance -> ServiceLayer UserAuthService -> DataLayer UserRepo
Я попытался обернуть свой метод слоя данных в try / catch и перебросить SqlException. Затем я завернул свой ServiceLayer в другой try / catch и сумел поймать это исключение. Он находится между ServiceLayer и распознавателем DI, где я не могу его перехватить, поэтому при отладке я получаю сообщение об ошибке, в котором говорится, что на данный момент существует необработанное исключение. Для тестирования я попытался обернуть это в try / catch, но оно все равно остается необработанным.
Таким образом, в результате получается, что последнее исключение, пойманное в Application_Error, заключается в том, что зависимость для моего контроллера не может быть найдена / контроллер не может быть создан.
protected override object DoGetInstance(Type serviceType, string key) {
//IContainer container = (CurrentNestedContainer ?? Container);
IContainer container = Container;
if (string.IsNullOrEmpty(key))
{
try
{
return serviceType.IsAbstract || serviceType.IsInterface
? container.TryGetInstance(serviceType)
: container.GetInstance(serviceType);
}
catch (SqlException ex)
{
throw;
}
catch (EntityException ex)
{
throw;
}
}
return container.GetInstance(serviceType, key);
}
Буду признателен за любые советы здесь. В настоящее время я не собираюсь разрабатывать основные решения для обработки исключений или ведения журналов, это действительно не такой проект. Как вы можете сказать, у меня нет большого опыта работы с исключениями. Я не знаю, в чем ошибка, поэтому разрыв строки подключения был всего лишь тестом, чтобы попытаться получить более глубокие исключения на поверхность.