namespace ConsoleApplication
private class Foo : IFoo, IDisposable
Console.WriteLine("Foo Created");
Console.WriteLine("Foo.Dispose() called");
private static void Main()
foreach (var m in new ITypeLifetimeManager[] {
new ContainerControlledLifetimeManager()
, new ExternallyControlledLifetimeManager()
, new HierarchicalLifetimeManager()
, new PerThreadLifetimeManager()
, new TransientLifetimeManager() })
Console.WriteLine($"Test {m}");
var thread = new Thread(() => PerformTest(m));
Console.WriteLine("\n\n");
private static void PerformTest(ITypeLifetimeManager manager)
Console.WriteLine("Pre container creation");
using (IUnityContainer container = new UnityContainer())
Console.WriteLine("Pre type regrestration");
container.RegisterType<IFoo, Foo>(manager);
Console.WriteLine("Pre bar1 resolve");
var bar1 = container.Resolve<Bar>();
Console.WriteLine("Pre bar2 resolve");
var bar2 = container.Resolve<Bar>();
Console.WriteLine("Leaving container scope.");