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));
}
}
}