StructureMap y el patrón decorador.
Estoy usando StructureMap, v. 2.5.3 y estoy teniendo problemas para encadenar implementaciones en una interfaz para implementar el patrón Decorator.
Estoy acostumbrado a Windsor, donde es posible nombrar variaciones en las implementaciones de la interfaz y enviar el impl nombrado. en otra implícita (por defecto).
Esta es la versión predeterminada, no decorada, que funciona bien:
ObjectFactory.Initialize(registry =>
{
registry.ForRequestedType<ICommentService()
.TheDefault.Is.OfConcreteType<CommentService>();
... }
Este es el ctor en el decorador, al que quiero llamar:
public CommentAuditService( ICommentService commentService,
IAuditService auditService )
Esto funciona, pero no me da acceso al objeto decorado:
registry.ForRequestedType<ICommentService>()
.TheDefault.Is.OfConcreteType<CommentService>()
.EnrichWith(x => new CommentAuditService());
Esto me lleva a un inf. lazo:
registry.ForRequestedType<ICommentService>()
.TheDefault.Is.OfConcreteType<CommentService>()
.EnrichWith(x => new CommentAuditService( new CommentService(),
new AuditService()));
De momento esto es lo que me parece.debería trabajo:
registry.ForRequestedType<ICommentService.()
.TheDefault.Is.OfConcreteType<CommentAuditService>()
.WithCtorArg("commentService")
.EqualTo(new CommentService());
Sin embargo, lo envía a un bucle sin fin de crear nuevas instancias de CommentAuditService
¿Alguien tiene una respuesta rápida? (aparte de cambiar a Castle.Windsor, que estoy muy cerca en este momento)