我有一个名为IListener
的界面。现在我想创建一个接收该接口实例的类。
public Controller(IListener listener1, IListener listener2)
{ ... }
IListener
的实施需要一个端口。如何在IListener
的绑定中确定参数名称,以便我可以选择合适的端口?我认为回调可能如下:
public Kernel()
{
Bind<IListener>()
.To<SyncUdpListener>()
.WithConstructorArgument("port", GetListenerPort);
}
private object GetListenerPort(IContext context, ITarget target)
{
var command = this.Get<Command>();
switch (...)
{
case "videoListener":
return command.VideoPort;
case "audioListener":
return command.AudioPort;
}
throw new Exception();
}
我需要在switch语句中填写参数名称。
提前致谢!
答案 0 :(得分:2)
我不是100%肯定你想在这里实现的目标。但如果你的控制器看起来像:
public Controller(IListener videoListener, IListener audioListener)
{ ... }
使用以下代码:
private object GetListenerPort(IContext context, ITarget target)
{
var command = this.Get<Command>();
switch (context.Request.Target.Name)
{
case "videoListener":
return command.VideoPort;
case "audioListener":
return command.AudioPort;
}
throw new Exception();
}
您将获得一个带有两个IListener
实例的控制器,其中包含VideoPort和AudioPort参数。也许你必须确保Request.Target.Type
是正确的控制器类型。