CastleWindsorを使用して、複数の実装を持つ1つのインターフェイスに複数のライフサイクルを構成することは可能ですか?
IFoo
FooA : IFoo
ライフサイクル:シングルトン
FooB : IFoo
ライフサイクル:一時的
CastleWindsorを使用して、複数の実装を持つ1つのインターフェイスに複数のライフサイクルを構成することは可能ですか?
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);