我使用一个工厂返回一个datasender:
Bind<IDataSenderFactory>()
.ToFactory();
public interface IDataSenderFactory
{
IDataSender CreateDataSender(Connection connection);
}
我有datasender(WCF和远程),其采取不同类型的两种不同的实现:
public abstract class Connection
{
public string ServerName { get; set; }
}
public class WcfConnection : Connection
{
// specificProperties etc.
}
public class RemotingConnection : Connection
{
// specificProperties etc.
}
我试图用Ninject绑定基于从参数传递的连接的类型,这些特定类型datasender的。 我曾尝试以下失败:
Bind<IDataSender>()
.To<RemotingDataSender>()
.When(a => a.Parameters.Single(b => b.Name == "connection") as RemotingConnection != null)
我相信这是因为“当”只是提供了一个请求,我就需要完整的上下文能够检索的实际参数值,并检查它的类型。 我手足无措,不知道该做什么,比使用命名绑定,实际执行的工厂,把逻辑在里面,即其他
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));
}