コントローラーが呼び出す依存関係 (たとえばIServiceRetriever
) があり、それが別の依存関係を呼び出します。" " の呼び出し中にコントローラーが解放されたことを確認でき_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
これまで見たことがありません。コントローラーを解放すると、Windsor が依存関係グラフをたどり、見つかったものすべてを破棄すると想定していましたが、そうではありませんでした。ここで何が欠けていますか?