Castle windsor intercepter

Estoy tratando de interceptar llamadas al método Handle en mis controladores de comandos. este proceso funciona bien cuando registro explícitamente cada controlador de comandos, el problema es que mi registro genérico de los controladores de comandos y el interceptor no es correcto.

excepción:

Se produjo una excepción del tipo 'Castle.MicroKernel.ComponentActivator.ComponentActivatorException' en Castle.Windsor.dll pero no se manejó en el código de usuario

Información adicional: ComponentActivator: no se pudo proxy TempSearch.Command.Data.CommandHandlers.AddTempsJobCommandHandler

Parece que no puede encontrar el interceptor, ya que dice que algunos componentes están mal configurados:

"Algunas dependencias de este componente no se pudieron resolver de manera estática. \ R \ n'TempSearch.Command.Data.CommandHandlers.AddTempsCandidateAvailabilityCommandHandler 'está esperando las siguientes dependencias: \ r \ n- Componente' TempSearch.Ioc.ExceptionHandlingIntercepter '(mediante anulación ) que no se encontró. ¿Se olvidó de registrarlo o de escribir mal el nombre? Si el componente está registrado y la anulación es por tipo, asegúrese de que no tenga un nombre no predeterminado asignado explícitamente o anule la dependencia por nombre. \ r \ norte"

La interfaz:

public interface ICommandHandler<TCommand>
{
    void Handle(TCommand command);
}

un ejemplo de controlador de comandos:

public class AddTempsCandidateAvailabilityCommandHandler 
    : ICommandHandler<TempsCandidateAvailability>
{
    private readonly IDbConnection connection;

    public AddTempsCandidateAvailabilityCommandHandler(
        IDbConnection connection)
    {
        this.connection = connection;
    }

    public void Handle(TempsCandidateAvailability command)
    {
        // ...
    }
}

la registración:

public void Install(IWindsorContainer container, IConfigurationStore store)
{
    container.Register(
        Component.For<IDbConnection>()
            .UsingFactoryMethod(() => ConnectionHelper.GetOpenDbConnection(
                Connection.DatabaseName.ReedOnline))
            .LifestylePerWebRequest());

    container.Register(
        Classes
            .FromAssemblyContaining<EcruiterCommands>()
            .Where(t => t.Name.EndsWith("Commands"))
            .WithService
            .AllInterfaces().LifestylePerWebRequest());

    container.Register(
        Classes
            .FromAssemblyContaining<EcruiterCommands>()
            .Where(t => t.Name.EndsWith("CommandHandler"))
            .WithService.AllInterfaces()
            .LifestylePerWebRequest()
            .Configure(c => c.Interceptors<ExceptionHandlingIntercepter>()
                .LifestyleTransient()));
}

el interceptor

[Transient]
public class ExceptionHandlingIntercepter : IInterceptor
{
    private static readonly MethodInfo Execute = 
        typeof(ICommandHandler<>).GetMethod("Handle");

    private readonly IKernel kernel;

    public ExceptionHandlingIntercepter(IKernel kernel)
    {
        this.kernel = kernel;
    }

    public void Intercept(IInvocation invocation)
    {
        if (invocation.Method != Execute)
        {
            invocation.Proceed();
            return;
        }

        try
        {
            invocation.Proceed();
        }
        finally
        {
            kernel.ReleaseComponent(invocation.Proxy);
        }
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta