【发布时间】:2011-09-01 08:35:13
【问题描述】:
我有 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 在此示例中可能看起来相同,但这不是真实情况。在实际情况下,我有更多的依赖项和组件,我不想为此烦恼。
那么,有没有办法通过某个属性指定 Castle 应该给我哪个实现?
【问题讨论】:
标签: c# dependency-injection castle-windsor ioc-container