我找不到任何在StructureMap中遍历依赖图的机制。 我的问题如下:
类Coordinator
有两个依赖项:ServiceA
和ServiceB
。
ServiceA
和ServiceB
都有一个依赖关系:CustomWebClient
。
CustomWebClient
有一个依赖项:Logger
。
我必须将Logger
的不同实现注入CustomWebClient
。这取决于CustomWebClient
是注入ServiceA
还是ServiceB
。
我找到的唯一条件机制是基于父类型和根类型,但在我的情况下它没有帮助。是否可以在StructureMap中配置它?
答案 0 :(得分:0)
虽然我没有找到任何方法以正常方式执行此操作,但我发现StructureMap在内部存储依赖关系堆栈。
在 StructureMap 2.6.4.0 中,我们可以使用构建堆栈框架:
container.For<Logger>().AlwaysUnique().Use(ctx =>
{
var pi = typeof (BuildFrame).GetProperty("Parent", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
var frame = ctx.BuildStack.Parent;
while (frame != null)
{
var currentType = frame.ConcreteType;
if (currentType == typeof(ServiceA))
return new LoggerA();
if (currentType == typeof(ServiceB))
return new LoggerB();
frame = (BuildFrame)pi.GetValue(frame, null);
}
return new LoggerDefault();
}
在 StructureMap 3.1.2.0 中,我们必须使用_instances
对象的BuildSession
私有字段(IContext
实现)。 _instances
字段具有以下类型:Stack<Instance>
。