1

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

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

问题是UnitOfWorkContainer.Current只有一个。

4

1 回答 1

4

你这样做是错的

你给温莎一个预先存在的实例。因此它不是在创建它——它是在重用你给它的实例。

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

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

我想你真正的意思是:

 container.Register(Component.For<IUnitOfWork>()
            .UsingFactoryMethod(() => UnitOfWorkContainer.Current)
                .LifeStyle.Transient);
于 2011-08-01T08:21:08.567 回答