2

我正在使用 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
}
4

1 回答 1

1

这里的难点在于,ActionFilters 似乎会随着每个请求以及在 Spring 不知道的上下文中被实例化。我在 ActionFilter 构造函数中使用 Spring“ContextRegistry”类处理了相同的情况。不幸的是,它在你的代码中引入了 Spring 特定的 API 使用,如果可能的话,这是一个避免的好习惯。

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

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

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

于 2009-12-23T23:35:54.387 回答