1

我正在使用 IOC 注入一个对象,但由于对象中的内部缓存,我想确保每次调用它时都有一个新的对象实例。波纹管代码第一次用于创建实例,但它似乎保留了该实例并将其重用于后续调用

_container = new WindsorContainer().Install(
    FromAssembly.Containing<RepositoryInstaller>());

_container.AddFacility<TypedFactoryFacility>();

_container.Register(
    Component.For<Func<MyUnitOfWork>>()
        .Instance(() => {  
            return _container.Resolve<MyUnitOfWork>(); 
        }).LifeStyle.Transient);

我想要的是能够调用已解析的 Func 实例,但让 IOC 容器每次都为我提供一个新的 MyUnitOfWork 实例:

//invoke FUNC and ensure that instance of MyUnitOfWork is created every time
var newInstance = myInstance();
4

1 回答 1

1

我无法从您的问题中得知您是否希望 func 每次都是一个新实例,或者您是否希望工作单元每次都是一个新实例。

如果是前者,我看不出它有什么关系,因为实例没有状态。

如果是后者,您能否显示您在容器中注册 MyUnitOfWork 的代码(可能在 RepositoryInstaller 中)?我猜你并没有在短暂的生活方式中记录这一点。看起来 Func 是您在显示的代码中注册为瞬态的(不是 MyUnitOfWork 本身)。

编辑:根据您的编辑,我最好的猜测是您没有将 MyUnitOfWork 注册为瞬态。此行似乎将Func注册为瞬态:

_container.Register(Component.For<Func<MyUnitOfWork>>().Instance(() 
=> {  return _container.Resolve<MyUnitOfWork>(); }).LifeStyle.Transient);

你能显示 RepositoryInstaller 代码吗?

于 2013-08-08T15:07:08.030 回答