如何配置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
相关产品推荐
相关产品推荐

