У меня есть 2 компонента (AWriter и BWriter), где оба реализуют интерфейс IWriter. И у меня есть 2 компонента (AComponent и BComponent), где оба реализуют интерфейс IComponent и оба имеют зависимость от IWriter. Но в AComponent я хочу сказать Виндзору, чтобы он дал мне экземпляр AWriter, а в BComponent я хочу, чтобы Виндзор дал мне экземпляр 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 могут выглядеть одинаково в этом примере, но это не настоящая ситуация. У меня намного больше зависимостей и компонентов в реальной ситуации, и я не хотел беспокоиться об этом.
Итак, есть ли способ каким-то образом указать каким-либо атрибутом, какую реализацию должен дать Касл?