I use Castle Windsor as my IoC container. I have an application that has a structure similar to the following:
- MyApp.Services.dll
IEmployeeService
IContractHoursService
...
- MyApp.ServicesImpl.dll
EmployeeService : MyApp.Services.IEmployeeService
ContractHoursService : MyApp.Services.IContractHoursService
...
I use the XML configuration at the moment, and every time I add a new IService/Service pair, I have to add a new component to the XML configuration file. I want to switch all this over to the fluent registration API but haven't worked out exactly the right recipe to do what I want yet.
Can anyone help? The lifestyles will all be singleton
.
Many thanks in advance.
With
AllTypes
you can easily do this:From http://stw.castleproject.org/(S(nppam045y0sdncmbazr1ob55))/Windsor.Registering-components-by-conventions.ashx:
I think your registration would look like:
If you implement a base type, like
IService
on your interfaces, you can register them all at once using the following construct:For more examples, see the article. This has a very good description on what the possibilities are.
I took Pieter's answer forward just a little bit (the key being, as he suggested,
AllTypes
) and have come up with this:This goes through all public classes in the
MyApp.ServicesImpl.dll
assembly and registers each in the container using the first interface it implements. Because I want all the classes in the services assembly, I need no marker interface.The above works for an old version of Windsor. The current Castle Windsor documentation for registering components for the latest version suggests the following: