Cela m'a complètement dérouté sur un certain nombre de configurations. Je continue à lire la documentation, et je ne comprends tout simplement pas. Voici mon code d'enregistrement:StructureMap Class Chaining - Stack Overflow ou d'autres erreurs
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>());
Comme il est, il dit qu'il n'y a pas d'instance par défaut pour IWorkItemProcessor (ce qui est correct). Basculer la dernière ligne à ceci:
ForRequestedType<IWorkItemProcessor>().TheDefault.Is.OfConcreteType<WorkItemQueue>()
.CtorDependency<IWorkItemProcessor>().Is(x => x.OfConcreteType<WorkItemRetryProcessor>());
... Fait une exception de dépassement de pile.
Comment enchaînez-vous les classes qui implémentent une interface et acceptent cette même interface dans leur constructeur?