CastleWindsor是否可以为一个具有多个实现的接口配置多个生命周期?
IFoo
FooA : IFoo
生命周期:单身人士
FooB : IFoo
生命周期:瞬态
答案 0 :(得分:0)
如果没有更多上下文,我的最佳答案是:使用代理:
public class FooProxy : IFoo
{
private readonly FooA a;
private readonly FooB b;
public FooProxy(FooA a, FooB b)
{
this.a = a;
this.b = b;
}
void IFoo.SomeFooMethod()
{
this.GetFooBasedOnSomeCondition().SomeFooMethod();
}
private IFoo GetFooBasedOnSomeCondition()
{
return condition ? this.a : this.b;
}
}
此代理类取决于FooA
和FooB
,您可以将其注册为瞬态,以便解析为IFoo
。
另一个选择是注册一个委托工厂,它返回正确的实现:
container.AddFacility<FactorySupportFacility>();
container.Register(Component.For<IFoo>()
.UsingFactoryMethod(() =>
{
return condition
? container.Resolve<FooA>()
: container.Resolve<FooB>();
})
.LifeStyle.Transient);