我尝试使用StructureMap根据请求的某些方面(参数的某些组合)在请求时交换实现。其中一些依赖项深深嵌套在对象图中。
由于多种原因,我想在请求管道的开头执行此操作 - 所以我想在解析顶级服务之前更换所有嵌套的依赖项并且避免注入工厂
目前,我通过为每个请求创建一个嵌套容器来实现这一目标。有点像:
using(var nested = _container.GetNestedContainer())
{
foreach(var service in services)
{
nested.For(service.InterfaceType).Use(service.ImplementationType);
}
nested.GetInstance<IRequestHandler>().Invoke(request);
}
从我所读过的内容来看,这似乎是滥用嵌套容器,主要用于生命周期管理(我也关注潜在的性能影响以及任何其他潜在的问题)。 / p>
在解决入口点时,我还尝试在主容器上使用.With
...
var entryPoint = _container.With(typeof(ISomeNestedDependency),
typeof(ImplementationForThisRequest))
.Resolve<IRequestHandler>();
entryPoint.Invoke(request);
...但是这似乎注册了与容器中第一个请求相关联的类型,然后始终从该点开始解析该类型(大概是在容器本身的生命周期内)。
使用StructureMap 3解决此问题的正确方法是什么?有吗?