You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置DryIoc将Func参数匹配到服务的特定依赖

实现DryIoc解析Func时指定依赖参数对应Func的输入位置

完全可以实现,通过DryIoc的参数索引绑定功能就能精准控制依赖的构造参数对应Func的哪个输入参数。

修改后的代码示例

var container = new Container();
// 注册D时指定其构造参数取自Func的第二个输入参数(索引从0开始)
container.Register<D>(made: Made.Of(() => new D(Arg.Index<int>(1))));
container.Register<C>();

var c = container.Resolve<Func<int, int, C>>()(2, 4);
Console.WriteLine($"{c.I1}, {c.I2}, {c.D.I}"); // 输出:2, 4, 4

class C
{
    public int I1 { get; }
    public int I2 { get; }
    public D D { get; }

    public C(D d, int i1, int i2)
    {
        I1 = i1;
        I2 = i2;
        D = d;
    }
}

class D
{
    public int I { get; }
    public D(int i) => I = i;
}

原理说明

  • 使用Made.Of方法定义D的创建逻辑,通过Arg.Index<int>(1)明确指定:D构造函数的int参数要从外部传入的Func参数列表中索引为1的位置取值(Func的参数顺序是(int, int),索引0对应第一个参数2,索引1对应第二个参数4)。
  • 注册C时无需额外修改,DryIoc会自动将Func的索引0参数传给C的i1,索引1参数传给C的i2,同时D的参数已被绑定到索引1,最终得到期望的输出。

如果需要更灵活的参数匹配(比如按参数名称而非索引),也可以使用Arg.Named结合命名参数,但在这个场景下,按索引绑定最直接。

内容的提问来源于stack exchange,提问作者patvax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 14:03:28