<PackageReference Include="Castle.Windsor" Version="3.3.0" />

AssemblyInstaller

using Castle.Core.Internal; using Castle.MicroKernel.Registration; using Castle.MicroKernel.SubSystems.Configuration; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace Castle.Windsor.Installer { public class AssemblyInstaller : IWindsorInstaller { private readonly Assembly assembly; private readonly InstallerFactory factory; public AssemblyInstaller(Assembly assembly, InstallerFactory factory) { if ((object)assembly == null) throw new ArgumentNullException("assembly"); if (factory == null) throw new ArgumentNullException("factory"); this.assembly = assembly; this.factory = factory; } public void Install(IWindsorContainer container, IConfigurationStore store) { IEnumerable<Type> enumerable = factory.Select(FilterInstallerTypes(assembly.GetAvailableTypes(false))); if (enumerable != null) { foreach (Type item in enumerable) { IWindsorInstaller windsorInstaller = factory.CreateInstance(item); windsorInstaller.Install(container, store); } } } private IEnumerable<Type> FilterInstallerTypes(IEnumerable<Type> types) { return types.Where(delegate(Type t) { if (t.IsClass && !t.IsAbstract && !t.IsGenericTypeDefinition) return t.Is<IWindsorInstaller>(); return false; }); } } }