<PackageReference Include="Castle.Windsor" Version="6.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 (model.Implementation == (Type)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 val = kernel.ConfigurationStore.GetComponentConfiguration(model.Name); if (val == null) { val = new MutableConfiguration("component"); kernel.ConfigurationStore.AddComponentConfiguration(model.Name, val); } if ((object)model.Configuration == null) model.Configuration = val; } private void EnsureComponentName(ComponentModel model) { if (model.ComponentName == null) { if (name != null) model.ComponentName = name; else if (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(); } } }