I've been learning a lot about 
Castle Windsor lately. I ran into something that surprised me yesterday. Suppose you have the following class hierarchy:
interface Service
{
}
class ServiceA : Service
{
}
class ServiceB : Service
{
}What do you think the output from this code will be?
var container = new WindsorContainer();
container.Register(Component
    .For<Service>()
    .ImplementedBy<ServiceA>());
container.Register(Component
    .For<Service>()
    .ImplementedBy<ServiceB>()
    .Named("serviceb"));
var service = container.Resolve<Service>();
Console.WriteLine(service.GetType().Name);If you said 
ServiceA, then you were right! Now, what about the output from this code?
var container = new WindsorContainer();
container.Register(Component
    .For<Service>()
    .ImplementedBy<ServiceB>()
    .Named("serviceb"));
container.Register(Component
    .For<Service>()
    .ImplementedBy<ServiceA>());
var service = container.Resolve<Service>();
Console.WriteLine(service.GetType().Name);If you said 
ServiceB, then maybe the title of this post gave the answer away. I expected the named service to be a special case. In other words, I thought asking for a 
Service implementation would always give me 
ServiceA, unless I specifically asked for 
ServiceB by name.