ich eine Fabrik bin mit einem datasender zurückzukehren:Ninject bedingte Bindung basierend auf Parametertyp
Bind<IDataSenderFactory>()
.ToFactory();
public interface IDataSenderFactory
{
IDataSender CreateDataSender(Connection connection);
}
Ich habe zwei verschiedene Implementierungen von datasender (WCF und Remoting), die verschiedene Arten erfolgen:
public abstract class Connection
{
public string ServerName { get; set; }
}
public class WcfConnection : Connection
{
// specificProperties etc.
}
public class RemotingConnection : Connection
{
// specificProperties etc.
}
Ich versuche, Ninject zu verwenden, um diese bestimmten Typen von Datasender basierend auf dem Typ der Verbindung, die von dem Parameter übergeben wird, zu binden. Ich habe die erfolglos versucht folgende:
Bind<IDataSender>()
.To<RemotingDataSender>()
.When(a => a.Parameters.Single(b => b.Name == "connection") as RemotingConnection != null)
Ich glaube, das liegt daran, dass ‚.Wenn‘ nur eine Anfrage stellt, und ich müsste die volle Kontext seiner Art in der Lage sein den aktuellen Parameterwert abzurufen und überprüfen. Ich bin ratlos, was zu tun, außer dem Namen Bindungen verwendet wird, tatsächlich die Fabrik Umsetzung und die Logik setzt dort
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));
}