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

DefaultsDescriptor

using Castle.Core; using Castle.Core.Configuration; using Castle.Core.Internal; using System; using System.Linq; namespace Castle.MicroKernel.ModelBuilder.Descriptors { public class DefaultsDescriptor : IComponentModelDescriptor { private readonly Type implementation; private readonly ComponentName name; public DefaultsDescriptor(ComponentName name, Type implementation) { this.name = name; this.implementation = implementation; } public void BuildComponentModel(IKernel kernel, ComponentModel model) { if ((object)model.Implementation == null) model.Implementation = (implementation ?? FirstService(model)); EnsureComponentName(model); EnsureComponentConfiguration(kernel, model); } public void ConfigureComponentModel(IKernel kernel, ComponentModel model) { } private void EnsureComponentConfiguration(IKernel kernel, ComponentModel model) { IConfiguration configuration = kernel.ConfigurationStore.GetComponentConfiguration(model.Name); if (configuration == null) { configuration = new MutableConfiguration("component"); kernel.ConfigurationStore.AddComponentConfiguration(model.Name, configuration); } if (model.Configuration == null) model.Configuration = configuration; } private void EnsureComponentName(ComponentModel model) { if (model.ComponentName == null) { if (name != null) model.ComponentName = name; else if ((object)model.Implementation == typeof(LateBoundComponent)) { model.ComponentName = new ComponentName("Late bound " + FirstService(model).FullName, false); } else { model.ComponentName = ComponentName.DefaultFor(model.Implementation); } } } private Type FirstService(ComponentModel model) { return model.Services.First(); } } }