using System.Diagnostics;
using Castle.MicroKernel.Registration;
public class TestClass : IDisposable
static long _globalInstanceCount = 0;
readonly long _instanceId;
_instanceId = Interlocked.Increment(ref _globalInstanceCount);
Console.WriteLine(string.Format("TestClass ({0}) - Constructor called", _instanceId));
Console.WriteLine(string.Format("TestClass ({0}) - ByeBye called", _instanceId));
void IDisposable.Dispose()
Console.WriteLine(string.Format("TestClass ({0}) - Dispose called", _instanceId));
public static class Program
public static void Main(string[] args)
Console.WriteLine("Testing as a singleton");
var container = new WindsorContainer()
.Register(Component.For<TestClass>()
.OnDestroy(t => t.ByeBye())
TestClass tc = container.Resolve<TestClass>();
Console.WriteLine("Releasing the component");
Console.WriteLine("Disposing of the container");
Console.WriteLine("Testing transient");
var container = new WindsorContainer()
.Register(Component.For<TestClass>()
.OnDestroy(t => t.ByeBye())
TestClass tc = container.Resolve<TestClass>();
Console.WriteLine("Releasing the component");
Console.WriteLine("Disposing of the container");