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

FromDescriptor

public abstract class FromDescriptor : IRegistration
Describes the source of types to register.
using System; using System.Collections.Generic; namespace Castle.MicroKernel.Registration { public abstract class FromDescriptor : IRegistration { private readonly Predicate<Type> additionalFilters; private readonly IList<BasedOnDescriptor> criterias; private bool allowMultipleMatches; protected FromDescriptor(Predicate<Type> additionalFilters) { this.additionalFilters = additionalFilters; allowMultipleMatches = false; criterias = new List<BasedOnDescriptor>(); } protected abstract IEnumerable<Type> SelectedTypes(IKernel kernel); public FromDescriptor AllowMultipleMatches() { allowMultipleMatches = true; return this; } public BasedOnDescriptor BasedOn<T>() { return BasedOn(typeof(T)); } public BasedOnDescriptor BasedOn(Type basedOn) { return BasedOn((IEnumerable<Type>)new Type[1] { basedOn }); } public BasedOnDescriptor BasedOn(params Type[] basedOn) { return BasedOn((IEnumerable<Type>)basedOn); } public BasedOnDescriptor BasedOn(IEnumerable<Type> basedOn) { BasedOnDescriptor basedOnDescriptor = new BasedOnDescriptor(basedOn, this, additionalFilters); criterias.Add(basedOnDescriptor); return basedOnDescriptor; } public BasedOnDescriptor InNamespace(string namespace) { return Where(Component.IsInNamespace(namespace, false)); } public BasedOnDescriptor InNamespace(string namespace, bool includeSubnamespaces) { return Where(Component.IsInNamespace(namespace, includeSubnamespaces)); } public BasedOnDescriptor InSameNamespaceAs(Type type) { return Where(Component.IsInSameNamespaceAs(type)); } public BasedOnDescriptor InSameNamespaceAs(Type type, bool includeSubnamespaces) { return Where(Component.IsInSameNamespaceAs(type, includeSubnamespaces)); } public BasedOnDescriptor InSameNamespaceAs<T>() { return Where(Component.IsInSameNamespaceAs<T>()); } public BasedOnDescriptor InSameNamespaceAs<T>(bool includeSubnamespaces) where T : class { return Where(Component.IsInSameNamespaceAs<T>(includeSubnamespaces)); } public BasedOnDescriptor Pick() { return BasedOn<object>(); } public BasedOnDescriptor Where(Predicate<Type> accepted) { BasedOnDescriptor basedOnDescriptor = new BasedOnDescriptor(new Type[1] { typeof(object) }, this, additionalFilters).If(accepted); criterias.Add(basedOnDescriptor); return basedOnDescriptor; } void IRegistration.Register(IKernelInternal kernel) { if (criterias.Count != 0) { foreach (Type item in SelectedTypes(kernel)) { using (IEnumerator<BasedOnDescriptor> enumerator2 = criterias.GetEnumerator()) { while (enumerator2.MoveNext() && (!enumerator2.Current.TryRegister(item, kernel) || allowMultipleMatches)) { } } } } } } }