我正在使用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();
答案 0 :(得分:1)
我无法告诉您是否希望每次都将func作为新实例,或者每次都希望工作单元成为新实例。
如果是前者,我看不出它是如何重要的,因为实例没有状态。
如果是后者,是否可以显示在容器中注册MyUnitOfWork的代码(可能在RepositoryInstaller中)?我猜你没有用短暂的生活方式注册。看起来Func就是你在所显示的代码中注册为瞬态的(不是MyUnitOfWork本身)。
编辑:基于您的编辑,我最好的猜测是您没有将MyUnitOfWork注册为Transient。此行似乎将 Func 注册为瞬态:
_container.Register(Component.For<Func<MyUnitOfWork>>().Instance(()
=> { return _container.Resolve<MyUnitOfWork>(); }).LifeStyle.Transient);
你能展示RepositoryInstaller代码吗?