Можно ли сделать так, чтобы Unity не генерировала исключение SynchronizationLockException все время?

В контейнере внедрения зависимостей Unity есть, как представляется, широко известная проблема, когда SynchronizedLifetimeManager часто вызывает метод Monitor.Exit для создания исключения SynchronizationLockException, которое затем перехватывается и игнорируется. Это проблема для меня, потому что мне нравится отлаживать в Visual Studio, настроенном для прерывания любого сгенерированного исключения, поэтому каждый раз, когда мое приложение запускается, я нарушаю это исключение несколько раз без причины.

Как я могу предотвратить выброс этого исключения?

Везде, где эта проблема упоминается в Интернете, совет обычно включает изменение параметров отладчика, чтобы игнорировать его. Это похоже на то, чтобы пойти к доктору и сказать: «Доктор, доктор, у меня болит рука, когда я поднимаю ее», чтобы сказать: «Ну, хватит поднимать ее». Я ищу решение, которое остановит исключение в первую очередь.

Исключение возникает в методе SetValue, потому что он предполагает, что сначала будет вызван GetValue, где вызывается Monitor.Enter. Однако классы LifetimeStrategy и UnityDefaultBehaviorExtension оба регулярно вызывают SetValue без вызова GetValue.

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

Ответы на вопрос(8)

Ваш ответ на вопрос