Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制IOC在每次调用时创建新对象_C#_Castle Windsor - Fatal编程技术网

C# 强制IOC在每次调用时创建新对象

C# 强制IOC在每次调用时创建新对象,c#,castle-windsor,C#,Castle Windsor,我使用IOC注入一个对象,但是由于对象中的内部缓存,我希望确保每次调用对象时都有一个新的对象实例。下面的代码用于第一次创建实例,但它似乎保留了实例,并在后续调用中重用它 _container = new WindsorContainer().Install( FromAssembly.Containing<RepositoryInstaller>()); _container.AddFacility<TypedFactoryFacility>(); _cont

我使用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每次都是一个新实例,或者是否希望工作单元每次都是一个新实例

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

如果是后者,能否显示在容器(可能在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代码吗