StructureMap e o padrão de decorador
Eu estou usando StructureMap, v. 2.5.3 e estou tendo problemas com o encadeamento de implementações em uma interface para implementar o padrão Decorator.
Estou acostumado a Windsor, onde é possível nomear variações em implementações de interface e enviar o nome impl. em outro (padrão) impl.
Esta é a versão padrão não decorada, que funciona bem:
ObjectFactory.Initialize(registry =>
{
registry.ForRequestedType<ICommentService()
.TheDefault.Is.OfConcreteType<CommentService>();
... }
Este é o ctor no decorador, que eu quero chamar:
public CommentAuditService( ICommentService commentService,
IAuditService auditService )
Isso funciona, mas não me dá acesso ao objeto decorado:
registry.ForRequestedType<ICommentService>()
.TheDefault.Is.OfConcreteType<CommentService>()
.EnrichWith(x => new CommentAuditService());
Isso me leva a um inf. loop:
registry.ForRequestedType<ICommentService>()
.TheDefault.Is.OfConcreteType<CommentService>()
.EnrichWith(x => new CommentAuditService( new CommentService(),
new AuditService()));
Até agora isso é o que parece para mimdevemos trabalhos:
registry.ForRequestedType<ICommentService.()
.TheDefault.Is.OfConcreteType<CommentAuditService>()
.WithCtorArg("commentService")
.EqualTo(new CommentService());
No entanto, enviá-lo em um loop infinito de criação de novas instâncias de CommentAuditService
Alguém tem uma resposta rápida? (diferente de mudar para o Castle.Windsor, que eu estou muito próximo no momento)