It turns out that after re-registering type as a singleton in Unity calls to container.Resolve() return a new instance. This may lead and have led to ugly bugs if your code relies on having only one instance of the type. Proofing test:
using NUnit.Framework; using Unity; using Unity.Lifetime; namespace DoubleSingletonRegistration { [TestFixture] public class DoubleSingletonTest { public class Foo {} [Test] public void NewInstanceReturnedAfterReregistration() { var container = new UnityContainer(); container.RegisterType<Foo>(new ContainerControlledLifetimeManager()); var foo1 = container.Resolve<Foo>(); var foo2 = container.Resolve<Foo>(); container.RegisterType<Foo>(new ContainerControlledLifetimeManager()); var foo3 = container.Resolve<Foo>(); var foo4 = container.Resolve<Foo>(); Assert.AreSame(foo1, foo2); Assert.AreNotSame(foo2, foo3); // new instance returned after re-registration! Assert.AreSame(foo3, foo4); } } }