StructureMap und das Dekorationsmuster

Ich verwende StructureMap, Version 2.5.3, und habe Probleme beim Verketten von Implementierungen auf einer Schnittstelle, um das Decorator-Muster zu implementieren.

Ich bin an Windsor gewöhnt, wo es möglich ist, Variationen von Schnittstellenimplementierungen zu benennen und das benannte Gerät zu senden. in ein anderes (default) impl.

Dies ist die nicht dekorierte Standardversion, die problemlos funktioniert:

ObjectFactory.Initialize(registry =>
{
  registry.ForRequestedType<ICommentService()
    .TheDefault.Is.OfConcreteType<CommentService>();
... }

Dies ist der ctor des Dekorateurs, den ich anrufen möchte:

public CommentAuditService( ICommentService commentService, 
                            IAuditService auditService )

Dies funktioniert, gibt mir aber keinen Zugriff auf das dekorierte Objekt:

registry.ForRequestedType<ICommentService>()
  .TheDefault.Is.OfConcreteType<CommentService>()
  .EnrichWith(x => new CommentAuditService());

Das bringt mich in eine inf. Schleife:

registry.ForRequestedType<ICommentService>()
  .TheDefault.Is.OfConcreteType<CommentService>()
  .EnrichWith(x => new CommentAuditService( new CommentService(), 
                                            new AuditService()));

Soweit kommt mir das so vorsollte Arbeit:

registry.ForRequestedType<ICommentService.()
  .TheDefault.Is.OfConcreteType<CommentAuditService>()
  .WithCtorArg("commentService")
  .EqualTo(new CommentService());

Es wird jedoch in eine Endlosschleife zum Erstellen neuer Instanzen von CommentAuditService gesendet

Hat jemand eine schnelle Antwort? (außer zu Castle.Windsor zu wechseln, dem ich momentan sehr nahe stehe)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage