¿Se puede hacer que Unity no arroje SynchronizationLockException todo el tiempo?

El contenedor de inyección de dependencia de Unity tiene lo que parece ser un problema ampliamente conocido en el que SynchronizedLifetimeManager a menudo hace que el método Monitor.Exit arroje una SynchronizationLockException que luego se detecta e ignora. Esto es un problema para mí porque me gusta depurar con Visual Studio configurado para romper cualquier excepción lanzada, por lo que cada vez que se inicia mi aplicación, estoy rompiendo esta excepción varias veces sin ninguna razón.

¿Cómo puedo evitar que se lance esta excepción?

Dondequiera que se mencione este problema en otra parte de la web, el consejo generalmente implica cambiar la configuración del depurador para ignorarlo. Esto es similar a ir al médico y decir: "Doctor, doctor, me duele el brazo cuando lo levanto", que me digan: "Bueno, deje de levantarlo". Estoy buscando una solución que evite que se lance la excepción en primer lugar.

La excepción ocurre en el método SetValue porque supone que GetValue habrá sido llamado primero, donde se llama a Monitor.Enter. Sin embargo, las clases LifetimeStrategy y UnityDefaultBehaviorExtension llaman regularmente a SetValue sin llamar a GetValue.

Prefiero no tener que cambiar el código fuente y mantener mi propia versión de Unity, por lo que espero una solución donde pueda agregar alguna combinación de extensiones, políticas o estrategias al contenedor que garantice que, si el el administrador de toda la vida es un SynchronizedLifetimeManager, GetValue siempre se llama antes que nada.

Respuestas a la pregunta(8)

Su respuesta a la pregunta