我正在使用工厂返回数据发送器:
Bind<IDataSenderFactory>()
.ToFactory();
public interface IDataSenderFactory
{
IDataSender CreateDataSender(Connection connection);
}
我有两种不同的数据发送器实现(WCF 和远程处理),它们采用不同的类型:
public abstract class Connection
{
public string ServerName { get; set; }
}
public class WcfConnection : Connection
{
// specificProperties etc.
}
public class RemotingConnection : Connection
{
// specificProperties etc.
}
我正在尝试使用 Ninject 根据从参数传递的 Connection 类型来绑定这些特定类型的数据发送器。我尝试了以下失败:
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));
}