C# 强制IOC在每次调用时创建新对象
我使用IOC注入一个对象,但是由于对象中的内部缓存,我希望确保每次调用对象时都有一个新的对象实例。下面的代码用于第一次创建实例,但它似乎保留了实例,并在后续调用中重用它C# 强制IOC在每次调用时创建新对象,c#,castle-windsor,C#,Castle Windsor,我使用IOC注入一个对象,但是由于对象中的内部缓存,我希望确保每次调用对象时都有一个新的对象实例。下面的代码用于第一次创建实例,但它似乎保留了实例,并在后续调用中重用它 _container = new WindsorContainer().Install( FromAssembly.Containing<RepositoryInstaller>()); _container.AddFacility<TypedFactoryFacility>(); _cont
_container = new WindsorContainer().Install(
FromAssembly.Containing<RepositoryInstaller>());
_container.AddFacility<TypedFactoryFacility>();
_container.Register(
Component.For<Func<MyUnitOfWork>>()
.Instance(() => {
return _container.Resolve<MyUnitOfWork>();
}).LifeStyle.Transient);
我无法从您的问题中看出您是否希望func每次都是一个新实例,或者是否希望工作单元每次都是一个新实例 如果是前者,我看不出它有什么关系,因为实例没有状态 如果是后者,能否显示在容器(可能在RepositoryInstaller中)中注册MyUnitOfWork的代码?我猜你不是以一种短暂的生活方式来记录这一点。看起来Func是您在所示代码中注册为瞬态的(而不是MyUnitOfWork本身) 编辑:根据您的编辑,我最好的猜测是您没有将MyUnitOfWork注册为瞬态。此行似乎将函数注册为瞬态:
_container.Register(Component.For<Func<MyUnitOfWork>>().Instance(()
=> { return _container.Resolve<MyUnitOfWork>(); }).LifeStyle.Transient);
\u container.Register(Component.For().Instance()
=>{return _container.Resolve();}).lifesture.Transient);
您能显示RepositoryInstaller代码吗?我无法从您的问题中判断您是否希望func每次都是一个新实例,或者您是否希望工作单元每次都是一个新实例 如果是前者,我看不出它有什么关系,因为实例没有状态 如果是后者,能否显示在容器(可能在RepositoryInstaller中)中注册MyUnitOfWork的代码?我猜你不是以一种短暂的生活方式来记录这一点。看起来Func是您在所示代码中注册为瞬态的(而不是MyUnitOfWork本身) 编辑:根据您的编辑,我最好的猜测是您没有将MyUnitOfWork注册为瞬态。此行似乎将函数注册为瞬态:
_container.Register(Component.For<Func<MyUnitOfWork>>().Instance(()
=> { return _container.Resolve<MyUnitOfWork>(); }).LifeStyle.Transient);
\u container.Register(Component.For().Instance()
=>{return _container.Resolve();}).lifesture.Transient);
您能显示RepositoryInstaller代码吗