Can Unity be made to not throw SynchronizationLockException all the time?

前端 未结 8 1391
借酒劲吻你
借酒劲吻你 2020-11-29 18:36

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

8条回答
  •  清酒与你
    2020-11-29 18:47

    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);
       }
    }
    

提交回复
热议问题