Инъекция условного связывания в зависимости от типа параметра

Я использую фабрику для возврата базы данных:

Bind<IDataSenderFactory>()
    .ToFactory();

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

У меня есть две разные реализации datasender (WCF и remoting), которые принимают разные типы:

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

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

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

Я пытаюсь использовать Ninject для привязки этих конкретных типов данных в зависимости от типа соединения, переданного из параметра. Я попытался следующее безуспешно:

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

Я полагаю, что это потому, что «.When» только предоставляет запрос, и мне нужен полный контекст, чтобы иметь возможность получить фактическое значение параметра и проверить его тип. Я в растерянности относительно того, что делать, кроме использования именованных привязок, фактической реализации фабрики и размещения логики там, т.е.

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

Ответы на вопрос(1)

Ваш ответ на вопрос