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

DefaultComponentModelBuilder

Summary description for DefaultComponentModelBuilder.
using Castle.Core; using Castle.Core.Internal; using Castle.MicroKernel.ModelBuilder.Inspectors; using Castle.MicroKernel.SubSystems.Conversion; using System; using System.Collections.Generic; namespace Castle.MicroKernel.ModelBuilder { [Serializable] public class DefaultComponentModelBuilder : IComponentModelBuilder { private readonly List<IContributeComponentModelConstruction> contributors = new List<IContributeComponentModelConstruction>(); private readonly IKernel kernel; public IContributeComponentModelConstruction[] Contributors => contributors.ToArray(); public DefaultComponentModelBuilder(IKernel kernel) { this.kernel = kernel; InitializeContributors(); } public void AddContributor(IContributeComponentModelConstruction contributor) { contributors.Add(contributor); } public ComponentModel BuildModel(ComponentName name, Type[] services, Type classType, Arguments extendedProperties) { ComponentModel model = new ComponentModel(name, services, classType, extendedProperties); contributors.ForEach(delegate(IContributeComponentModelConstruction c) { c.ProcessModel(kernel, model); }); return model; } public ComponentModel BuildModel(IComponentModelDescriptor[] customContributors) { ComponentModel model = new ComponentModel(); customContributors.ForEach(delegate(IComponentModelDescriptor c) { c.BuildComponentModel(kernel, model); }); contributors.ForEach(delegate(IContributeComponentModelConstruction c) { c.ProcessModel(kernel, model); }); ICollection<IMetaComponentModelDescriptor> metaDescriptors = null; customContributors.ForEach(delegate(IComponentModelDescriptor c) { c.ConfigureComponentModel(kernel, model); IMetaComponentModelDescriptor metaComponentModelDescriptor = c as IMetaComponentModelDescriptor; if (metaComponentModelDescriptor != null) { if (metaDescriptors == null) metaDescriptors = model.GetMetaDescriptors(true); metaDescriptors.Add(metaComponentModelDescriptor); } }); return model; } public void RemoveContributor(IContributeComponentModelConstruction contributor) { contributors.Remove(contributor); } protected virtual void InitializeContributors() { IConversionManager conversionManager = kernel.GetConversionManager(); AddContributor(new GenericInspector()); AddContributor(new ConfigurationModelInspector()); AddContributor(new ConfigurationParametersInspector()); AddContributor(new LifestyleModelInspector(conversionManager)); AddContributor(new ConstructorDependenciesModelInspector()); AddContributor(new PropertiesDependenciesModelInspector(conversionManager)); AddContributor(new LifecycleModelInspector()); AddContributor(new InterceptorInspector()); AddContributor(new MixinInspector()); AddContributor(new ComponentActivatorInspector(conversionManager)); AddContributor(new ComponentProxyInspector(conversionManager)); } } }