Могу ли я добавить обработчик в AppDomain.CurrentDomain.UnhandledException в библиотеке классов - PullRequest
5 голосов
/ 09 июня 2011

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

обычно в выигрышных формахВ приложении есть основная точка входа, но это библиотека классов, которая вызывается другим приложением.

Есть ли главная точка входа в библиотеке классов, где я могу подключить это событие, или это просто невозможно в библиотеке классов, если я не уверен, что один метод будет вызван раньше всего?

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Нет, библиотеки классов не имеют главной точки входа. Если вам кажется, что он вам нужен, вы можете концептуально создать его практически через публичную область API. Другими словами, ограничьте общедоступные объекты, и в этих общедоступных объектах убедитесь, что вызов сделан в какой-то момент. Это может привести к тому, что вам понадобится какой-то фабричный вызов для настройки вашей библиотеки, прежде чем делать что-либо.

0 голосов
/ 09 июня 2011
// Set the unhandled exception mode to force errors to go through our handler. 
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

// Add the event handler for handling thread exceptions to the event.
AppDomain.CurrentDomain.UnhandledException += 
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

Благодаря Брайану Дисхау

Ясно, что это не дает вам некоторого не декларативного способа назначения обработчика, как, например, назначение прослушивателя трассировки в app.config, но это дает мне идею.

Вы можете написать свой собственный раздел конфигурации, который будет выполнять этот код. Затем, когда конфиг загружен, вы можете назначить обработчик событий, я найду несколько ссылок о том, как это сделать ...

Однако ваша конфигурация должна присутствовать в основном приложении, так что, возможно, это неправильно.

РЕДАКТИРОВАТЬ Извините, я не думаю, что есть способ сделать это без какой-либо среды IoC, что еще могло бы загрузить ваш класс. Единственные варианты, которые я могу придумать, требуют каких-то изменений в основном приложении.

Мне интересно, что я не прав.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...