获取要注入的对象的参数名称

时间:2011-12-02 22:43:13

标签: c# ninject

我有一个名为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语句中填写参数名称。

提前致谢!

1 个答案:

答案 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是正确的控制器类型。