加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 何时使用Request.RegisterForDispose?

发布时间:2020-12-16 03:22:29 所属栏目:asp.Net 来源:网络整理
导读:对于ASP.NET Web API,我一直在研究自己的IHttpControllerActivator实现,我想知道何时(或为什么?)使用HttpRequestMessage扩展方法“RegisterForDispose”. 我看到这样的例子,我可以看到它的相关性,因为IHttpController不继承IDisposable,而IHttpController的
对于ASP.NET Web API,我一直在研究自己的IHttpControllerActivator实现,我想知道何时(或为什么?)使用HttpRequestMessage扩展方法“RegisterForDispose”.

我看到这样的例子,我可以看到它的相关性,因为IHttpController不继承IDisposable,而IHttpController的实现并不保证它自己的dispose逻辑.

public IHttpController Create(HttpRequestMessage request,HttpControllerDescriptor controllerDescriptor,Type controllerType)
{
    var controller = (IHttpController) _kernel.Get(controllerType);
    request.RegisterForDispose( new Release(()=> _kernel.Release(controller)));
    return controller;
}

但后来我看到这样的事情并开始怀疑:

public IHttpController Create(
    HttpRequestMessage request,Type controllerType)
{
    if (controllerType == typeof(RootController))
    {
        var disposableQuery = new DisposableStatusQuery();
        request.RegisterForDispose(disposableQuery);
        return new RootController(disposableQuery);
    }
    return null;
}

在这个例子中,RootController在这里没有注册处理,大概是因为它是一个ApiController或MVC控制器? – 因此会自行处理.

DisposableStatusQuery的实例已注册处置,因为它是一个一次性对象,但为什么控制器不能处理实例本身? RootController具有disposableQuery(或者更确切地说,它的接口或抽象基础)的知识,因此会知道它是一次性的.

我什么时候才能真正需要使用HttpRequestMessage.RegisterForDispose?

解决方法

我发现一个场景对于自定义ActionFilter非常有用.

因为属性被缓存/重用,所以属性中的项不应该依赖于控制器被处理(据我所知 – 并且可能有警告)…所以为了创建一个不是自定义属性绑定到特定的控制器类型/实现,您可以使用此技术来清理您的东西.在我的例子中,它是一个环境DbContextScope属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读