sto usando una fabbrica per restituire un datasender:Ninject condizione vincolante in base al tipo di parametro
Bind<IDataSenderFactory>()
.ToFactory();
public interface IDataSenderFactory
{
IDataSender CreateDataSender(Connection connection);
}
Ho due diverse implementazioni di datasender (WCF e remoti), che prendono diverse tipologie:
public abstract class Connection
{
public string ServerName { get; set; }
}
public class WcfConnection : Connection
{
// specificProperties etc.
}
public class RemotingConnection : Connection
{
// specificProperties etc.
}
Sto cercando di utilizzare Ninject per associare questi tipi specifici di datasender in base al tipo di connessione passata dal parametro. Ho provato quanto segue senza successo:
Bind<IDataSender>()
.To<RemotingDataSender>()
.When(a => a.Parameters.Single(b => b.Name == "connection") as RemotingConnection != null)
Credo che questo sia perche '.Quando' fornisce solo una richiesta e avrei bisogno di un contesto pieno di essere in grado di recuperare il valore del parametro reale e controllare il suo tipo. Sono ad una perdita quanto a che cosa fare, altro che usare attacchi di nome, in realtà l'attuazione della fabbrica e mettendo la logica in là vale a dire
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));
}