Enlace condicional de Ninject basado en el tipo de parámetro

Estoy usando una fábrica para devolver un datasender:

Bind<IDataSenderFactory>()
    .ToFactory();

public interface IDataSenderFactory
{
    IDataSender CreateDataSender(Connection connection);
}

Tengo dos implementaciones diferentes de datasender (WCF y remoting) que toman diferentes tipos:

public abstract class Connection
{
    public string ServerName { get; set; }
}

public class WcfConnection : Connection
{
    // specificProperties etc.
}

public class RemotingConnection : Connection
{
    // specificProperties etc.
}

Estoy tratando de usar Ninject para vincular estos tipos específicos de datasender según el tipo de conexión que se pasa del parámetro. He intentado lo siguiente sin éxito:

Bind<IDataSender>()
    .To<RemotingDataSender>()
    .When(a => a.Parameters.Single(b => b.Name == "connection") as RemotingConnection != null)

Creo que esto se debe a que '.When' solo proporciona una solicitud y necesitaría el contexto completo para poder recuperar el valor del parámetro real y verificar su tipo. No sé qué hacer, aparte de usar enlaces con nombre, implementando realmente la fábrica y poniendo la lógica allí, es decir,

public IDataSender CreateDataSender(Connection connection)
{
    if (connection.GetType() == typeof(WcfConnection))
    {
        return resolutionRoot.Get<IDataSender>("wcfdatasender", new ConstructorArgument("connection", connection));
    }

    return resolutionRoot.Get<IDataSender>("remotingdatasender", new ConstructorArgument("connection", connection));
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta