2

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

4

1 に答える 1