Dependency injection 在Castle Windsor中控制器未释放依赖项?

Dependency injection 在Castle Windsor中控制器未释放依赖项?,dependency-injection,castle-windsor,Dependency Injection,Castle Windsor,我有一个依赖项(比如说,IServiceRetriever),我的控制器调用该依赖项,然后调用另一个依赖项。我可以在我的“\u container.Release(controller)”调用期间验证我的控制器是否已释放,但我的依赖项未被释放。我知道这一点,因为如果我再次调用控制器,此依赖项的公共属性将不断得到添加到其中的项(列表是在构造函数中创建的,因此如果创建了新实例,它将是一个新列表) 我将我的控制器注册为LifetimeTransient,并且我没有与依赖性相关的生活方式: contai

我有一个依赖项(比如说,
IServiceRetriever
),我的控制器调用该依赖项,然后调用另一个依赖项。我可以在我的“
\u container.Release(controller)
”调用期间验证我的控制器是否已释放,但我的依赖项未被释放。我知道这一点,因为如果我再次调用控制器,此依赖项的公共属性将不断得到添加到其中的项(列表是在构造函数中创建的,因此如果创建了新实例,它将是一个新列表)

我将我的控制器注册为LifetimeTransient,并且我没有与依赖性相关的生活方式:

container.Register(Classes.FromThisAssembly().BasedOn<IController>().LifestyleTransient());

container.Register(Classes.FromAssemblyContaining<IServiceRetriever>()
                .Where(x => x.IsPublic)
                .WithServiceDefaultInterfaces()); //dependency that calls IQueryBuilder

container.Register(Component.For<IQueryBuilder>().ImplementedBy<QueryBuilder>()); // not being released
container.Register(Classes.fromthissembly().BasedOn().LifestyleTransient());
container.Register(Classes.FromAssemblyContaining()
.其中(x=>x.IsPublic)
.WithServiceDefaultInterface())//调用IQueryBuilder的依赖项
container.Register(Component.For().ImplementedBy());//不被释放
我以前从未见过这种情况,我的假设是,如果我释放控制器,Windsor将遍历依赖关系图并处理它找到的所有内容,但事实并非如此。我在这里错过了什么

我以前从未见过这种情况,我假设如果我 释放控制器后,Windsor将遍历依赖关系图并 处理它找到的所有东西,情况并非如此


如果依赖项使用单例生命周期,则此假设是错误的。Castle Windsor中的默认生命周期为singleton,您已使用默认生命周期注册IServiceRetriever和IQueryBuilder。在您处置容器之前,不会释放单例对象。如果在没有对象包含对它的引用时释放它,您可能必须稍后创建另一个引用,它将不再是单例。

是的,它是单例,因此不会被释放(这是正确的行为)