windsor组件不是瞬态的

时间:2011-08-01 06:37:35

标签: castle-windsor ioc-container transient

我们正在使用windsor为IUnitOfWork接口注册实例。 UnitOfWorkContainer.Current是一个静态方法,它返回IUnitOfWork的一个实例。

 container.Register(Component.For<IUnitOfWork>()
            .Instance(UnitOfWorkContainer.Current)
                .LifeStyle.Transient);

问题是UnitOfWorkContainer.Current仅被称为问题。

1 个答案:

答案 0 :(得分:4)

You're doing it wrong

您正在向Windsor提供预先存在的实例。因此它不会创建它 - 它正在重用你给它的实例。

换句话说,您的代码可以重写为等效代码:

var theOneAndOnly = UnitOfWorkContainer.Current;
 container.Register(Component.For<IUnitOfWork>()
            .Instance(theOneAndOnly)
                .LifeStyle.Transient);

我认为你的真正含义是:

 container.Register(Component.For<IUnitOfWork>()
            .UsingFactoryMethod(() => UnitOfWorkContainer.Current)
                .LifeStyle.Transient);