Sto utilizzando StructureMap, v. 2.5.3 e sto avendo problemi con il concatenamento di implementazioni su un'interfaccia per implementare il pattern Decorator.StructureMap e il motivo decoratore
Sono abituato a Windsor, dove è possibile assegnare un nome alle varianti delle implementazioni dell'interfaccia e inviare il nome impl. in un altro (predefinito) impl.
questo è il default, versione non decorata, che funziona bene:
ObjectFactory.Initialize(registry =>
{
registry.ForRequestedType<ICommentService()
.TheDefault.Is.OfConcreteType<CommentService>();
... }
Questa è la ctor sul decoratore, che voglio chiamare:
public CommentAuditService(ICommentService commentService,
IAuditService auditService)
Questo funziona, ma fa non concedermi l'accesso all'oggetto decorato:
registry.ForRequestedType<ICommentService>()
.TheDefault.Is.OfConcreteType<CommentService>()
.EnrichWith(x => new CommentAuditService());
Questo mi richiede un inf. ciclo:
registry.ForRequestedType<ICommentService>()
.TheDefault.Is.OfConcreteType<CommentService>()
.EnrichWith(x => new CommentAuditService(new CommentService(),
new AuditService()));
Finora questo è ciò che mi sembra dovrebbe lavoro:
registry.ForRequestedType<ICommentService.()
.TheDefault.Is.OfConcreteType<CommentAuditService>()
.WithCtorArg("commentService")
.EqualTo(new CommentService());
Tuttavia inviarlo in un ciclo infinito di creazione di nuove istanze di CommentAuditService
Qualcuno ha una risposta veloce? (oltre al passaggio a Castle.Windsor, che sono molto vicino al momento)
Questo è il biglietto! Grazie Joshua – iammaz