<configuration>
<components>
<component id="smtp.sender"
service="Namespace.IEmailSender, AssemblyName"
type="Namespace.SmtpMailSender, AssemblyName" />
<component id="sendmail.sender"
type="Namespace.SendMailEmailSender, AssemblyName" />
<component id="newsletter"
type="Namespace.NewsLetterSenderService, AssemblyName">
<parameters>
<sender>${smtp.sender}</sender>
</parameters>
</components>
</configuration>
public interface IStaffService
{
}
public class StaffService : IStaffService
public IStaffRepository Repository { get; set; }
public interface IStaffRepository
public class StaffRepositoryA : IStaffRepository
public class StaffRepositoryB : IStaffRepository
public class ServiceOverrideTests
private WindsorContainer container;
public ServiceOverrideTests()
container = new WindsorContainer();
container.Register(Component.For<IStaffRepository>().Named("repository.staff.a").ImplementedBy<StaffRepositoryA>().LifeStyle.Transient);
container.Register(Component.For<IStaffRepository>().Named("repository.staff.b").ImplementedBy<StaffRepositoryB>().LifeStyle.Transient);
[Fact]
public void ByDefaultStaffServiceWiredUpToFirstServiceRegistered()
container.Register(Component.For<IStaffService>().Named("service.staff").ImplementedBy<StaffService>().LifeStyle.Transient);
var staffService = (StaffService)container.Resolve<IStaffService>();
Assert.IsType<StaffRepositoryA>(staffService.Repository);
public void WithServiceOverrideCanPickImplmentationByKey()
container.Register(Component.For<IStaffService>().Named("service.staff").ImplementedBy<StaffService>()
.ServiceOverrides(ServiceOverride.ForKey("Repository").Eq("repository.staff.b")).LifeStyle.Transient);
Assert.IsType<StaffRepositoryB>(staffService.Repository);
public IStaffRepository[] Repositories { get; set; } // <- is now an array of staff repository...
.ServiceOverrides(ServiceOverride.ForKey("Repositories").Eq("repository.staff.b", "repository.staff.a")).LifeStyle.Transient);
Assert.IsType<StaffRepositoryB>(staffService.Repositories[0]);
Assert.IsType<StaffRepositoryA>(staffService.Repositories[1]);