2 回答
TA贡献1869条经验 获得超4个赞
一种选择是创建包含其他两个的私有成员的第三个实现,并且对其方法的调用将仅转发给其他两种类型。WriteLine
public class BothCaseConsole : IConsole
{
private readonly LowerCaseConsole lcc = new LowerCaseConsole();
private readonly UpperCaseConsole ucc = new UpperCaseConsole();
public void WriteLine(string text)
{
lcc.WriteLine(text);
ucc.WriteLine(text);
}
}
然后只需将此类型注入到:Foo
new Foo(new BothCaseConsole()).WriteStuff("Stuff to write");
TA贡献2080条经验 获得超4个赞
您可以使用命名注册来注入 。这种方法很容易通过更多的实现进行扩展...或者您可以轻松删除其中一个...IEnumerable<IConsole>
container.RegisterType<IConsole, LowerConsole>("LowerConsole");
container.RegisterType<IConsole, UpperConsole>("UpperConsole");
container.RegisterType<IEnumerable<IConsole>, IConsole[]>();
然后ctor变得有点不同,还有方法...FooWriteStuff
public Foo(IEnumerable<IConsole> consoles)
{
this.consoles = consoles;
}
public void WriteStuff(string stuff)
{
foreach(var console in consoles)
{
console.WriteLine(stuff);
}
}
- 2 回答
- 0 关注
- 92 浏览
添加回答
举报