Я использую StructureMap, v. 2.5.3, и у меня возникают проблемы с объединением реализаций интерфейса для реализации шаблона Decorator.
Я привык к Виндзору, где можно назвать варианты реализации интерфейса и отправить именованный имп. в другой (по умолчанию) impl.
Это стандартная, не украшенная версия, которая отлично работает:
ObjectFactory.Initialize(registry =>
{
registry.ForRequestedType<ICommentService()
.TheDefault.Is.OfConcreteType<CommentService>();
... }
Это ctor на декораторе, который я хочу вызвать:
public CommentAuditService( ICommentService commentService,
IAuditService auditService )
Это работает, но не дает мне доступ к украшенному объекту:
registry.ForRequestedType<ICommentService>()
.TheDefault.Is.OfConcreteType<CommentService>()
.EnrichWith(x => new CommentAuditService());
Это заставляет меня int inf. loop:
registry.ForRequestedType<ICommentService>()
.TheDefault.Is.OfConcreteType<CommentService>()
.EnrichWith(x => new CommentAuditService( new CommentService(),
new AuditService()));
До сих пор это то, что мне кажется, должно работать:
registry.ForRequestedType<ICommentService.()
.TheDefault.Is.OfConcreteType<CommentAuditService>()
.WithCtorArg("commentService")
.EqualTo(new CommentService());
Однако он отправляет его в бесконечный цикл создания новых экземпляров CommentAuditService
Есть ли у кого-нибудь быстрый ответ? (кроме переключения на Castle.Windsor, с которым я очень близок в данный момент)