对于 ASP.NET Web API,我一直在研究自己的实现,IHttpControllerActivator
并且想知道何时(或为什么?)使用HttpRequestMessage
扩展方法“ RegisterForDispose
”。
我看到这样的例子,我可以看到其中的相关性,因为 IHttpController 不继承 IDisposable,并且 IHttpController 的实现不保证它自己的处置逻辑。
public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) { var 控制器 = (IHttpController) _kernel.Get(controllerType); request.RegisterForDispose(new Release(()=> _kernel.Release(controller))); 返回控制器; }
但后来我看到这样的事情并开始怀疑:
公共 IHttpController 创建( HttpRequestMessage 请求, HttpControllerDescriptor 控制器描述符, 类型控制器类型) { if (controllerType == typeof(RootController)) { var 一次性查询 = 新的 DisposableStatusQuery(); request.RegisterForDispose(disposableQuery); 返回新的 RootController(disposableQuery); } 返回空值; }
在这种情况下,RootController 没有在这里注册处置,大概是因为它是 ApiController 或 MVC 控制器?- 因此会自行处置。
DisposableStatusQuery 的实例已注册处置,因为它是一次性对象,但为什么控制器不能处置实例本身呢?RootController 了解一次性查询(或者更确切地说,它是接口或抽象基础),因此会知道它是一次性的。
我什么时候真正需要使用 HttpRequestMessage.RegisterForDispose?