我正在使用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
}
答案 0 :(得分:1)
这里最棘手的部分是,ActionFilters似乎在每个请求中都被实例化,并且在一个不在Spring所知的环境中。我在ActionFilter构造函数中使用Spring“ContextRegistry”类处理了相同的情况。不幸的是,它将Spring特定的API用法引入到您的代码中,如果可能的话,这是一个很好的做法。
这是我的构造函数的样子:
public MyAttribute()
{
CustomHelper = ContextRegistry.GetContext().GetObject("CustomHelper") as IConfigHelper;
}
请记住,如果要加载多个Spring上下文,则需要在GetContext(...)方法中指定所需的上下文。