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

本文关键字:参数 对象 注入 获取 | 更新日期: 2023-09-27 18:16:39

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

提前感谢!

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

我不是百分之百确定你想在这里实现什么。但是如果你的控制器看起来像:

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