CastleWindsor 是否可以为具有多个实现的一个接口配置多个生命周期?
IFoo
FooA : IFoo
生命周期:单例
FooB : IFoo
生命周期:瞬态
CastleWindsor 是否可以为具有多个实现的一个接口配置多个生命周期?
IFoo
FooA : IFoo
生命周期:单例
FooB : IFoo
生命周期:瞬态
没有更多上下文,我最好的答案是:使用代理:
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);