The Unity dependency injection container has what seems to be a widely known issue where the SynchronizedLifetimeManager will often cause the Monitor.Exit method to throw a
Beware to one mistake in Zubin Appoo's answer: there is UnityClearBuildPlanStrategies missing in his code.
The right code snippet is:
FieldInfo extensionsField = container.GetType().GetField("extensions", BindingFlags.Instance | BindingFlags.NonPublic);
List extensionsList = (List)extensionsField.GetValue(container);
UnityContainerExtension[] existingExtensions = extensionsList.ToArray();
container.RemoveAllExtensions();
container.AddExtension(new UnityClearBuildPlanStrategiesExtension());
container.AddExtension(new UnitySafeBehaviorExtension());
foreach (UnityContainerExtension extension in existingExtensions)
{
if (!(extension is UnityDefaultBehaviorExtension))
{
container.AddExtension(extension);
}
}