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

castle-windsor – 如何在ASP.NET 4 RC WebAPI中将依赖注入到动

发布时间:2020-12-16 04:19:36 所属栏目:asp.Net 来源:网络整理
导读:我正在使用Windsor在WebAPI项目中为我的控制器管理IoC.我有一个很好地解决控制器依赖关系的DependencyResolver,但现在我想将依赖关系注入我用来管理身份验证的自定义操作过滤器. 我已经研究过使用自定义的ActionInvoker,但是从接口上看,WebAPI正在使用如何在
我正在使用Windsor在WebAPI项目中为我的控制器管理IoC.我有一个很好地解决控制器依赖关系的DependencyResolver,但现在我想将依赖关系注入我用来管理身份验证的自定义操作过滤器.

我已经研究过使用自定义的ActionInvoker,但是从接口上看,WebAPI正在使用如何在执行之前解析自定义操作过滤器属性的属性依赖关系并不清楚.任何人都有一个很好的例子,说明如何在MVC 4 RC中做到这一点?

编辑:我知道你不能对过滤器进行构造函数注入,因为它们是属性,因此由.NET框架实例化 – 但我希望执行生命周期中的某些点在过滤器实例化之后发生但是在执行之前,我可以运行一些自定义代码来枚举过滤器的公共属性并注入必要的服务.

解决方法

动作过滤器是属性.在.NET属性中,实例化过程由.NET运行时管理,您无法控制它.所以一种可能性是使用 Poor Man’s Dependency Injection,我个人建议你反对.

另一种可能性是使用标记属性:

public class MyActionFilterAttribute : Attribute 
{ 

}

然后使用构造函数注入动作过滤器:

public class MyActionFilter : ActionFilterAttribute
{
    private readonly IFoo _foo;
    public MyActionFilter(IFoo foo)
    {
        _foo = foo;
    }

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (actionContext.ActionDescriptor.GetCustomAttributes<MyActionFilterAttribute>().Any())
        {
            // The action is decorated with the marker attribute => 
            // do something with _foo
        }
    }
}

然后在Application_Start中将其注册为全局操作过滤器:

IFoo foo = ....
GlobalConfiguration.Configuration.Filters.Add(new MyActionFilter(foo));

(编辑:李大同)

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

    推荐文章
      热点阅读