You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:23:07