在AutoFac解析时如何跨多个对象传递构造函数参数?
解决AutoFac解析时传递深层依赖的布尔参数问题
针对你遇到的场景,要在解析IFoo时给依赖链深处的Bar传递someFlag参数,有两种实用方案:
方法1:使用TypedParameter(简单场景)
如果你的依赖链中只有Bar需要布尔类型的构造参数,可以直接通过TypedParameter指定布尔值,AutoFac会自动在构造依赖时匹配该类型的参数:
注册代码:
var builder = new ContainerBuilder(); builder.RegisterType<Foo>().As<IFoo>(); builder.RegisterType<Bar>().As<IBar>(); var container = builder.Build();
解析时传参:
// 替换成你需要的布尔值 bool targetFlag = true; var foo = container.Resolve<IFoo>(new TypedParameter(typeof(bool), targetFlag));
方法2:使用ResolvedParameter(精准匹配,复杂场景)
如果项目中存在多个类有布尔类型构造参数,为避免冲突,可用ResolvedParameter精准匹配Bar类中的someFlag参数:
解析时传参:
bool targetFlag = true; var foo = container.Resolve<IFoo>( new ResolvedParameter( // 匹配条件:参数类型是bool,且所属类是Bar (parameterInfo, context) => parameterInfo.ParameterType == typeof(bool) && parameterInfo.Member.DeclaringType == typeof(Bar), // 提供参数值 (parameterInfo, context) => targetFlag ) );
这种方式会严格只给Bar的布尔参数赋值,不会影响其他依赖中的同类型参数,适合你实际项目中Foo和Bar之间有多层类的复杂场景。
内容的提问来源于stack exchange,提问作者aluAsker
相关产品推荐
相关产品推荐

