如何从StructureMap容器的Registry中移除服务配置?| C# .NET IoC
如何移除Registry中特定接口的绑定配置?
嘿,从你贴的代码片段来看,你应该是在用StructureMap这个依赖注入框架对吧?咱们来聊聊怎么移除TInterfaceB到TImplementationB的绑定配置:
情况1:还未创建Container实例
如果你只是写完了Registry的配置,但还没生成Container,最直接的方式当然是删掉那行registry.For<TInterfaceB>().Use<TImplementationB>();。但如果是动态配置的场景,你也可以通过操作Registry的模型来移除:
// 假设registry已经配置好所有绑定 var model = registry.BuildModel(); // 移除指定接口的所有绑定 model.RemoveType(typeof(TInterfaceB)); // 用处理后的模型创建容器 var container = new Container(model);
情况2:已经创建了Container实例
如果容器已经初始化完成,你可以通过容器的配置接口来清除指定接口的绑定:
// 清除TInterfaceB的所有绑定 container.Configure(c => c.For<TInterfaceB>().ClearAll());
要是你需要更精确地移除某一个特定的注册(比如该接口有多个绑定的场景),还可以这么做:
// 找到TInterfaceB对应的注册项 var targetRegistration = container.Model.For<TInterfaceB>().FirstOrDefault(); if (targetRegistration != null) { // 移除该注册 container.Model.Remove(targetRegistration); }
小提示
不同的DI框架处理这类需求的方式差异很大,比如Autofac会用ComponentRegistry来移除注册,而微软自带的DI(Microsoft.Extensions.DependencyInjection)因为设计是不可变的,只能重新构建服务集合。但从你的代码风格来看,StructureMap的方案应该就是你需要的。
内容的提问来源于stack exchange,提问作者TechManiac
相关产品推荐
相关产品推荐

