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

asp.net-mvc – 自定义Web-Api FilterAttribute的Autofac注入

发布时间:2020-12-16 06:38:35 所属栏目:asp.Net 来源:网络整理
导读:我有一个自定义ExceptionFilter,它记录Web-Api控制器中所有未捕获的异常.我想使用Autofac,为它注入ILog配置. 我的问题是怎么做? Autofac网站几乎没有解释如何这样做. CustomFilter: public class ApiControllerErrorFilterAttribute : ExceptionFilterAttr
我有一个自定义ExceptionFilter,它记录Web-Api控制器中所有未捕获的异常.我想使用Autofac,为它注入ILog配置.

我的问题是怎么做? Autofac网站几乎没有解释如何这样做.

CustomFilter:

public class ApiControllerErrorFilterAttribute : ExceptionFilterAttribute
{
    private static readonly ILog log = LogManager.GetLogger("ApiLog");
    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {
        log.Error("Error: ",actionExecutedContext.Exception);
    }
}

附:
为了澄清,我还有一个普通控制器的自定义过滤器,我能够成功配置它.

过滤正常控制器:

public class ControllerErrorFilterAttribute : HandleErrorAttribute
{
    public ICustomLogSettings Log { get; set; }
    public override void OnException(ExceptionContext filterContext)
    {
        Log.GetLogger.Error("Error: ",filterContext.Exception);
    }
}

日志配置:

builder.Register(c => new BaseLog()).As<ICustomLogSettings>().InstancePerRequest();
    builder.RegisterFilterProvider();

解决方法

these examples中的一些可能有所帮助,尤其是:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

builder.Register(c => new MyWebApiFilter())
    .AsWebApiActionFilterFor<ValuesController>()
    .InstancePerApiRequest();

从那以后,它告诉我你可以注册一个像其他任何服务一样得到解决的过滤器,这意味着你应该能够做到:

public class ApiControllerErrorFilterAttribute : ExceptionFilterAttribute
{
    private readonly ILog _log

    public ApiControllerErrorFilterAttribute(ILog log)
    {
        _log = log;
    }

    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {
        _log.Error("Error: ",actionExecutedContext.Exception);
    }
}

然后能够像这样注册它:

builder.RegisterType<ApiControllerErrorFilterAttribute>()
    .AsWebApiActionFilterFor<ValuesController>()
    .InstancePerApiRequest();

当然,您需要设置注册以解决ILog,这与this part of the wiki非常相似.

(编辑:李大同)

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

    推荐文章
      热点阅读