2016-03-31 3 views
10

В проекте WPF (с призмой) мы используем Unity как каркас DI.Как отлаживать разрешение Unity?

Недавно, после того, как мы объединили две большие ветки, мы не смогли запустить наше приложение, у нас было StackOverflowException. Из-за характера исключения мы не смогли получить его стек вызовов или текущие значения, мы только установили, что проблема исходила из Unity из-за пространства имен.

Мы провели более 5 часов, чтобы найти, были выпуск встречающийся:

упрощенный:

Мы имели 3-4 услуги (A, B, C и D), каждый из которых с реализацией , и в какой-то момент службе A требовалась услуга B, которой требовалась услуга C, которой требовалась услуга D, которой требовалась услуга A). В основном циклическая ссылка.

Мы хотели бы знать, если есть возможность добавить некоторые журналы, которые Unity пытается решить отслуживать с реализации X, и требующих для разрешения службы B, ...

Это помогло бы нам много, чтобы отладить эту проблему, чтобы непосредственно видеть, какие службы были вовлечены в эту циклическую ссылку.

Есть ли в любом случае для достижения этой цели?

+0

Там нет трассировки или выхода в Unity при разрешении типов. Возможно, вы можете использовать пользовательское расширение для расширенного Unity с вашим желаемым поведением. – Jehof

ответ

0

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

Он установлен с Visual Studio, и вы можете просто ввести «fuslogvw» в командную строку VS для запуска.

В противном случае, это может помочь при настройке регистратора: How do I enable assembly bind failure logging (Fusion) in .NET?

Смежные вопросы