Take the following useless program:
class Program
{
static void Main(string[] args)
{
IUnityContainer unityContainer = new UnityContainer();
Windsor doesn't support that out of the box, but you can create extension methods to do this:
static class WindsorExtensions
{
public static object ResolveType(this IWindsorContainer container, Type type)
{
if ( type.IsClass && !container.Kernel.HasComponent(type) )
container.Kernel.AddComponent(type.FullName, type, LifestyleType.Transient);
return container.Resolve(type);
}
public static T ResolveType(this IWindsorContainer container)
{ return (T)ResolveType(container, typeof(T)); }
}
class Program
{
static void Main(string[] args)
{
IUnityContainer unityContainer = new UnityContainer();
IWindsorContainer windsorContainer = new WindsorContainer();
Program unityProgram = unityContainer.Resolve();
Program castleProgram = windsorContainer.ResolveType();
}
}