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

ComponentConverter

using Castle.Core.Configuration; using Castle.MicroKernel.Context; using Castle.MicroKernel.Util; using System; namespace Castle.MicroKernel.SubSystems.Conversion { [Serializable] public class ComponentConverter : AbstractTypeConverter, IKernelDependentConverter { public override bool CanHandleType(Type type, IConfiguration configuration) { if (configuration.get_Value() != null) return ReferenceExpressionUtil.IsReference(configuration.get_Value()); return false; } public override bool CanHandleType(Type type) { if (base.Context.Kernel == null) return false; return base.Context.Kernel.HasComponent(type); } public override object PerformConversion(string value, Type targetType) { string text = ReferenceExpressionUtil.ExtractComponentName(value); if (text == null) throw new ConverterException($"""{value}""{targetType.FullName}"""); IHandler handler = base.Context.Kernel.LoadHandlerByName(text, targetType, null); if (handler == null) throw new ConverterException($"""{text}"""); return handler.Resolve(base.Context.CurrentCreationContext ?? CreationContext.CreateEmpty()); } public override object PerformConversion(IConfiguration configuration, Type targetType) { return PerformConversion(configuration.get_Value(), targetType); } } }