StructureMap类链接 - 堆栈溢出或其他错误

问题描述:

这使我完全困惑了许多配置。我一直在阅读文档,我只是不明白。这里是我的注册码:StructureMap类链接 - 堆栈溢出或其他错误

ForRequestedType<SimpleWorkItemProcessor>().TheDefault.Is.OfConcreteType<SimpleWorkItemProcessor>(); 

ForRequestedType<WorkItemRetryProcessor>().TheDefault.Is.OfConcreteType<WorkItemRetryProcessor>() 
    .CtorDependency<IWorkItemProcessor>().Is(x => x.OfConcreteType<SimpleWorkItemProcessor>()) 
    .WithCtorArg("busyDelay").EqualTo(TimeSpan.FromMilliseconds(20)) 
    .WithCtorArg("overallTimeout").EqualTo(TimeSpan.FromSeconds(60)); 

ForRequestedType<WorkItemQueue>().TheDefault.Is.OfConcreteType<WorkItemQueue>() 
    .CtorDependency<IWorkItemProcessor>().Is(x => x.OfConcreteType<WorkItemRetryProcessor>()); 

就这样,它表示没有IWorkItemProcessor的默认实例(这是正确的)。将最后一行切换为:

ForRequestedType<IWorkItemProcessor>().TheDefault.Is.OfConcreteType<WorkItemQueue>() 
    .CtorDependency<IWorkItemProcessor>().Is(x => x.OfConcreteType<WorkItemRetryProcessor>()); 

...产生堆栈溢出异常。

你如何将类链接在一起,实现一个接口,并在构造函数中接受相同的接口?

这有效,但我无法解释为什么。据我所知,第一个版本应该也一样。

ForRequestedType<SimpleWorkItemProcessor>().TheDefault.Is.OfConcreteType<SimpleWorkItemProcessor>(); 

var retryProcessor = ForRequestedType<WorkItemRetryProcessor>().TheDefault.Is.OfConcreteType<WorkItemRetryProcessor>() 
    .CtorDependency<IWorkItemProcessor>().Is(x => x.OfConcreteType<SimpleWorkItemProcessor>()) 
    .CtorDependency<TimeSpan>("busyDelay").Is(x => x.Object(TimeSpan.FromMilliseconds(20))) 
    .CtorDependency<TimeSpan>("overallTimeout").Is(x => x.Object(TimeSpan.FromSeconds(60))); 

ForRequestedType<IWorkItemProcessor>().TheDefault.Is.OfConcreteType<WorkItemQueue>() 
    .CtorDependency<IWorkItemProcessor>("workItemProcessor").Is(x => x.Instance(retryProcessor));