0

CastleWindsorを使用して、複数の実装を持つ1つのインターフェイスに複数のライフサイクルを構成することは可能ですか?

IFoo

FooA : IFoo ライフサイクル:シングルトン

FooB : IFoo ライフサイクル:一時的

4

1 に答える 1

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);
于 2012-05-15T15:01:53.500 に答える