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を実際に使用する必要があるのはいつですか?