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

asp.net-web-api – 将属性注入Web API的`System.Web.Http.Filte

发布时间:2020-12-16 09:51:05 所属栏目:asp.Net 来源:网络整理
导读:在ASP.NET Web api项目中,将属性注入执行过滤器属性的推荐位置在哪里?在MVC 3版本中,我们可以在从IoC容器中解析控制器时为ControllerActionInvoker设置我们自己的实现,并覆盖其GetFilters()方法以注入从容器中解析的组件. 在ASP.NET Web API项目中是否有类
在ASP.NET Web api项目中,将属性注入执行过滤器属性的推荐位置在哪里?在MVC 3版本中,我们可以在从IoC容器中解析控制器时为ControllerActionInvoker设置我们自己的实现,并覆盖其GetFilters()方法以注入从容器中解析的组件.

在ASP.NET Web API项目中是否有类似的地方可以做到这一点?我有一个控制器工厂,从容器中解析控制器,CreateController方法如下:

public IHttpController CreateController(HttpControllerContext controllerContext,string controllerName)
{
    var controller = _kernel.Resolve<IHttpController>(controllerName);

    controllerContext.Controller = controller;
    controllerContext.ControllerDescriptor = new HttpControllerDescriptor(_configuration,controllerName,controller.GetType());

    return controllerContext.Controller;
}

我已经看过HttpControllerDescriptor,看看是否有某处可以进行注射,但我看不到合适的位置.任何正确方向的指针?

解决方法

您需要实现IHttpControllerSelector并在HttpConfiguration的(Services属性)DefaultServices中注册您的选择器.

或者,要使用您自己的解析器/ DI框架,您需要更换解析器.有关示例,请参见here.

您需要实现自己的IFilterProvider.看一下ActionDescriptorFilterProvider的源代码.这是您可以注入属性的地方.

这是ActionDescriptorFilterProvider实现:

public IEnumerable<FilterInfo> GetFilters(HttpConfiguration configuration,HttpActionDescriptor actionDescriptor)
    {
        if (configuration == null)
        {
            throw Error.ArgumentNull("configuration");
        }

        if (actionDescriptor == null)
        {
            throw Error.ArgumentNull("actionDescriptor");
        }

        IEnumerable<FilterInfo> controllerFilters = actionDescriptor.ControllerDescriptor.GetFilters().Select(instance => new FilterInfo(instance,FilterScope.Controller));
        IEnumerable<FilterInfo> actionFilters = actionDescriptor.GetFilters().Select(instance => new FilterInfo(instance,FilterScope.Action));

        return controllerFilters.Concat(actionFilters);
    }

您所要做的就是使用实例lambda参数和注入属性.

注册正如您所知,过滤器提供程序需要针对HttpConfiguration进行注册.或者,请参见here.

(编辑:李大同)

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

    推荐文章
      热点阅读