使用Spring.Net将依赖项注入ASP.NET MVC ActionFilters

时间:2009-12-02 02:51:35

标签: asp.net asp.net-mvc spring.net mvccontrib action-filter

我正在使用MvcContrib来执行我的Spring.Net ASP.Net MVC控制器依赖注入。 我的依赖项没有被注入我的CustomAttribute动作过滤器。 如何将依赖项纳入其中?

假设你有一个看起来像这样的ActionFilter:

public class CustomAttribute : ActionFilterAttribute, ICustomAttribute
{
    private IAwesomeService awesomeService;

    public CustomAttribute(){}

    public CustomAttribute(IAwesomeService awesomeService)
    {
          this.awesomeService= awesomeService;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
         //Do some work
    }
}

使用Spring.Net配置部分,如下所示:

<object id="CustomAttribute " type="Assembly.CustomAttribute , Assembly" singleton="false">
    <constructor-arg ref="AwesomeService"/>
</object>

你像这样使用属性:

[Custom]
public FooController : Controller
{
    //Do some work
}

1 个答案:

答案 0 :(得分:1)

这里最棘手的部分是,ActionFilters似乎在每个请求中都被实例化,并且在一个不在Spring所知的环境中。我在ActionFilter构造函数中使用Spring“ContextRegistry”类处理了相同的情况。不幸的是,它将Spring特定的API用法引入到您的代码中,如果可能的话,这是一个很好的做法。

这是我的构造函数的样子:

public MyAttribute()
{
    CustomHelper = ContextRegistry.GetContext().GetObject("CustomHelper") as IConfigHelper;
}

请记住,如果要加载多个Spring上下文,则需要在GetContext(...)方法中指定所需的上下文。