ASP.NET Web API の独自の実装に取り組んできましたが、IHttpControllerActivator
いつ (またはなぜ?)HttpRequestMessage
拡張メソッド " RegisterForDispose
" を使用するのか疑問に思っています。
IHttpController は IDisposable を継承せず、IHttpController の実装は独自の破棄ロジックを保証しないため、このような例を見て、その関連性を確認できます。
public IHttpController Create(HttpRequestMessage リクエスト、HttpControllerDescriptor controllerDescriptor、タイプ controllerType) { var controller = (IHttpController) _kernel.Get(controllerType); request.RegisterForDispose( new Release(()=> _kernel.Release(コントローラー))); コントローラーを返します。 }
しかし、私はこのようなものを見て、不思議に思うようになりました:
public IHttpController Create( HttpRequestMessage リクエスト、 HttpControllerDescriptor コントローラー記述子、 タイプコントローラタイプ) { if (controllerType == typeof(RootController)) { vardisposableQuery = 新しい DisposableStatusQuery(); request.RegisterForDispose(disposableQuery); 新しい RootController(disposableQuery) を返します。 } null を返します。 }
この場合、おそらく ApiController または MVC コントローラーであるため、RootController はここでの処分用に登録されていませんか? - したがって、自分自身を処分します。
DisposableStatusQuery のインスタンスは使い捨てオブジェクトであるため、廃棄用に登録されていますが、コントローラーがインスタンス自体を廃棄できなかったのはなぜでしょうか? RootController は、disposableQuery (というより、インターフェイスまたは抽象ベース) の知識を持っているため、それが使い捨てであることがわかります。
HttpRequestMessage.RegisterForDisposeを実際に使用する必要があるのはいつですか?