У меня есть 2 компонента (AWriter и BWriter), оба из которых реализуют интерфейс IWriter. И у меня есть 2 компонента (AComponent и BComponent), где оба реализуют интерфейс IComponent и оба зависят от IWriter. Но в AComponent я хочу сказать Windsor, чтобы он дал мне экземпляр AWriter, а в BComponent я хочу сказать Windsor, чтобы он дал мне экземпляр BWriter. Как это сделать?
Вот код:
public interface IWriter
{
void Write();
}
public class AWriter : IWriter
{
public void Write()
{
Console.Write("A writer");
}
}
public class BWriter : IWriter
{
public void Write()
{
Console.Write("B writer");
}
}
public interface IComponent
{
void Do();
}
public class AComponent : IComponent
{
IWriter writer;
public AComponent(IWriter writer)
{
this.writer = writer;
}
public void Do()
{
writer.Write();
}
}
public class BComponent : IComponent
{
IWriter writer;
public BComponent(IWriter writer)
{
this.writer = writer;
}
public void Do()
{
writer.Write();
}
}
ПРИМЕЧАНИЕ. Это просто упрощенная проблема, и размещение AWriter в AComponent и BWriter в BComponent в качестве зависимости не является вариантом. Также в этом примере AComponent и BComponent могут выглядеть одинаково, но это не реальная ситуация. У меня гораздо больше зависимостей и компонентов в реальной ситуации, и я не хотел с этим заморачиваться.
Итак, есть ли способ каким-то образом указать каким-то атрибутом, какую реализацию должен дать мне Касл?