Mam zaprojektowane rejestratora telemetrii dla kilku oddzielnych platformach za pomocą złożonego wzoruC#, Zamek Windsor i złożona wzornictwo
public interface ILogger
{
void Log();
}
public class A : ILogger
{
public void Log(...);
}
public class B : ILogger
{
public void Log(...);
}
public class Many : ILogger
{
private readonly List<ILogger> m_loggers;
public Many(IEnumerable<ILogger> loggers)
{
m_loggers = loggers.ToList();
}
public void Log()
{
m_loggers.ForEach(c => c.Log());
}
}
Teraz chcę być w stanie uzyskać instancją „wiele” z kontenera Windsor ale spotkałem kilka problemów:
jeśli wszystkie ILoggers są w pojemniku w jaki sposób można upewnić się uzyskać „wiele” wdrażanie i nie „a” lub „B”?
Próbowałem po tym przykładzie Castle Windsor: How do I inject all implementations of interface into a ctor? i używać
container.Kernel.Resolver.AddSubResolver(new CollectionResolver(container.Kernel));
zarejestrować klasę z IEnumerable dependancy ale jeśli że klasa implementuje również IComponent przyzwyczajenie to stworzyć okrągły zależność?
Czy to, co próbuję, jest możliwe?