DynamicParametersDescriptor
using Castle.Core;
using Castle.MicroKernel.Context;
using Castle.MicroKernel.Handlers;
using Castle.MicroKernel.Registration;
namespace Castle.MicroKernel.ModelBuilder.Descriptors
{
public class DynamicParametersDescriptor : IComponentModelDescriptor
{
private static readonly string key = "component_resolving_handler";
private readonly DynamicParametersWithContextResolveDelegate resolve;
public DynamicParametersDescriptor(DynamicParametersWithContextResolveDelegate resolve)
{
this.resolve = resolve;
}
public void BuildComponentModel(IKernel kernel, ComponentModel model)
{
ComponentLifecycleExtension dynamicParametersExtension = GetDynamicParametersExtension(model);
dynamicParametersExtension.AddHandler((IKernel k, CreationContext c) => resolve(k, c, c.AdditionalArguments));
}
public void ConfigureComponentModel(IKernel kernel, ComponentModel model)
{
}
private ComponentLifecycleExtension GetDynamicParametersExtension(ComponentModel model)
{
if (model.ExtendedProperties.Contains(key))
return (ComponentLifecycleExtension)model.ExtendedProperties[key];
ComponentLifecycleExtension componentLifecycleExtension = new ComponentLifecycleExtension();
model.ExtendedProperties[key] = componentLifecycleExtension;
model.ResolveExtensions(true).Add(componentLifecycleExtension);
return componentLifecycleExtension;
}
}
}