Я использую Castle Windsor 2.5 в своем приложении.У меня есть сервис, который является составным, который действует как распределитель для объектов, которые реализуют тот же интерфейс.
public interface IService { void DoStuff(string someArg); }
public class ConcreteService1 : IService {
public void DoStuff(string someArg) { }
}
public class ConcreteService2 : IService {
public void DoStuff(string someArg) { }
}
public class CompositeService : List<IService>, IService
{
private readonly IService[] decoratedServices;
CompositeService(params IService[] decoratedServices) {
this.decoratedServices = decoratedServices;
}
public void DoStuff(string someArg) {
foreach (var service in decoratedServices) {
service.DoStuff(someArg);
}
}
}
У меня проблема в том, что использование конфигурации, такой как показано ниже, заставляет Windsor сообщать, чтоЦикл был обнаружен при попытке разрешить зависимость. "
windsor.Register(
Component
.For<IService>()
.ImplementedBy<CompositeService>(),
Component
.For<IService>()
.ImplementedBy<ConcreteService1>(),
Component
.For<IService>()
.ImplementedBy<ConcreteService2>()
);
Это циклическое поведение противоречит стандартному (не основанному на сборе) поведению, которое можно использовать для улучшения шаблона декоратора, гдеразрешаемый компонент игнорируется, и вместо него используется следующий зарегистрированный компонент, реализующий тот же интерфейс.
Итак, я хотел бы знать, есть ли способ заставить Windsor исключить компонент CompositeService
когда он разрешает службы IService
для свойства decoratedServices
.Свойство decoratedServices
должно содержать два элемента: экземпляр ConcreteService1
и экземпляр ConcreteService2
.Я хотел бы сделать это без явного указания зависимостей.