WPF Databinding: отлов исключений, генерируемых получателями свойств - PullRequest
8 голосов
/ 01 февраля 2011

Я ищу метод приложения для перехвата исключений, генерируемых геттерами с привязкой к базе данных (и сеттерами, но это выполнимо без особых трудностей).

Ни одно из этих событий не будет ловить исключения, генерируемые геттерами:

 AppDomain.CurrentDomain.UnhandledException
 Application.Current.DispatcherUnhandledException
 Application.Current.Dispatcher.UnhandledException

Другая идея заключается в использовании пользовательского класса привязки с UpdateSourceExceptionFilter, как описано в этой теме .К сожалению, этот метод только перехватывает исключения в установщиках свойств, а не в получателях.

Последний вариант, который я видел, - это использование прослушивателя трассировки PresentationTraceSources:

 PresentationTraceSources.Refresh();
 PresentationTraceSources.DataBindingSource.Listeners.Add(new PresentationLoggingTraceListener());
 PresentationTraceSources.DataBindingSource.Switch.Level = SourceLevels.Error;

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

Метод TraceListener, вероятно, сработает в конце, но, похоже,немного хакерскийЕсть ли какие-то другие варианты, которые мне не хватает, или я в значительной степени застрял с TraceListener?

1 Ответ

1 голос
/ 05 марта 2011

Я бы предложил подход к этой проблеме с помощью аспектно-ориентированного программирования (AOP).Это позволит вам внедрить код во время компиляции, который обернет ваш геттер тем, что вы пожелаете, в этом случае - попытка / отлов и логирование.Единственная, с которой я работал - это PostSharp Laos, бесплатная версия PostSharp http://www.sharpcrafters.com.

Я считаю, что это хорошее место для начала, http://www.richard -banks.org / 2009 /02 / аспект-ориентированного программирования.html , в этом примере он обертывает сеттеры с возможностью автоматического вызова NotifyPropertyChanged.Есть несколько других проектов АОП, которые вы также можете использовать, но я ими не пользовался.Вот хороший список: http://www.bodden.de/tools/aop-dot-net. Я бы предложил подходы на основе плетения.

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