Wyodrębnij wiązanie warunkowe na podstawie typu parametru

Używam fabryki, aby zwrócić zestaw danych:

Bind<IDataSenderFactory>()
    .ToFactory();

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

Mam dwie różne implementacje zestawu danych (WCF i zdalne), które przyjmują różne typy:

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

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

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

Próbuję użyć Ninject, aby powiązać te konkretne typy datasenderów na podstawie typu połączenia przekazanego z parametru. Bezskutecznie próbowałem:

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

Uważam, że dzieje się tak dlatego, że „.Gdy” dostarcza tylko żądanie, a ja potrzebuję pełnego kontekstu, aby móc pobrać rzeczywistą wartość parametru i sprawdzić jej typ. Nie wiem, co robić, poza używaniem nazwanych powiązań, faktycznie wdrażaniem fabryki i umieszczaniem tam logiki, tj.

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));
}

questionAnswers(1)

yourAnswerToTheQuestion