0

CastleWindsor 是否可以为具有多个实现的一个接口配置多个生命周期?

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 回答