UPDATE2: Although I think this is not a good idea, you can achieve this with the following code.
AllTypes.FromAssembly(GetType().Assembly) .IncludeNonPublicTypes() .BasedOn<IService>() .WithService.FirstInterface();
UPDATE: This is a very logical behavior, and I consider it a mistake if it were otherwise. AllTypes provides only a public type, because it assumes that if you made your type internal, you did it for some reason, and if it expanded it, it could be a security issue.
When you register a type explicitly on the other hand, it works because Windsor assumes, since you explicitly ask it to use an internal type, you know better.
Krzysztof Kozmic
source share