Получить имя параметра объекта для внедрения - PullRequest
1 голос
/ 03 декабря 2011

У меня есть интерфейс с именем 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 Ответ

2 голосов
/ 03 декабря 2011

Я не на 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 - это правильный тип контроллера.

...