DryIoc如何实现无需显式解析的动态服务映射注册
DryIoc 动态接口实现注册方案
DryIoc 原生支持该需求,无需手动调用IResolver绕过容器原生生命周期管理,使用Register方法的实现类型工厂重载即可实现你期望的注册逻辑。
具体实现
你的前置服务注册保持不变即可:
container.Register<ISettings>(); container.Register<Connection1>(); container.Register<Connection2>();
动态选择实现类型的注册代码如下:
container.Register<IConnection>( implementationTypeFactory: request => request.Container.Resolve<ISettings>().UseConnection1 ? typeof(Connection1) : typeof(Connection2) );
方案特性
- 完全匹配你期望的模式:委托只负责根据依赖的
ISettings配置返回目标实现类型,实例创建、依赖注入、生命周期管理全由容器原生处理 - 不存在
RegisterDelegate手动解析的缺陷:不会绕过容器的装饰器拦截、作用域校验、生命周期释放逻辑 - 不需要为
Connection1/Connection2注册额外的服务键,容器会自动匹配对应类型的注册完成构建
如果你使用的是5.0以下版本的DryIoc,也可以通过Made.Of工厂配置实现相同效果,核心逻辑一致,都是让容器负责最终的实例创建,而非手动返回构造完成的实例。
内容的提问来源于stack exchange,提问作者Christoph Mett
相关产品推荐
相关产品推荐

