如何在Autofac中注册组件时仅手动解析单个依赖?
在Autofac中实现仅传入指定参数的自动依赖注入
完全可以实现你想要的效果,Autofac的IComponentContext.Resolve方法支持传入参数覆盖构造函数的指定依赖,其余依赖会自动从容器中解析。
直接修改你的注册代码即可:
builder.Register(c => { var userRightsFileFullPath = c.Resolve<IUserRightsConfigurationLocation>().UserRightsFileFullPath; // 使用Resolve并传入指定参数,其余依赖自动注入 return c.Resolve<UserRightsFile>(new NamedParameter("userRightsFile", userRightsFileFullPath)); }).As<IUserRightsFile>();
关键说明:
Resolve<UserRightsFile>会自动从容器中获取ICrypto、IHashing、IFileSystem的已注册实例NamedParameter通过构造函数参数名精准匹配,确保传入的路径参数替换正确位置- 如果构造函数存在多个同类型参数,也可以用
TypedParameter(按类型匹配)或PositionalParameter(按位置索引匹配)来指定
需要确保UserRightsFile的其他依赖项(ICrypto、IHashing、IFileSystem)已经提前注册到Autofac容器中,这样才能被自动解析注入。
内容的提问来源于stack exchange,提问作者bas
相关产品推荐
相关产品推荐

