Asp.net mvc 3 如何使用Spring.NET DI注入过滤器(ASP.NET MVC 3)

Asp.net mvc 3 如何使用Spring.NET DI注入过滤器(ASP.NET MVC 3),asp.net-mvc-3,dependency-injection,spring.net,action-filter,Asp.net Mvc 3,Dependency Injection,Spring.net,Action Filter,试图搜索,但没有具体的答案(我在这方面很新) 在Spring.NET支持ASP.NET MVC 3的情况下,如何在操作过滤器内进行依赖项注入?四处研究,但我一点线索都没有/ 在Spring.NET纪录片中,似乎提到了这一切都已经处理好了,只需将动作过滤器注册到Spring的上下文中,Spring就会处理好所有必要的注入过程 然而,我就是不能让它工作。研究博客等,有人提到使用过滤器提供程序,或直接使用ContextRegistry.GetContext(),但这似乎并不符合AOP 那么正确的

试图搜索,但没有具体的答案(我在这方面很新)

在Spring.NET支持ASP.NET MVC 3的情况下,如何在操作过滤器内进行依赖项注入?四处研究,但我一点线索都没有/

在Spring.NET纪录片中,似乎提到了这一切都已经处理好了,只需将动作过滤器注册到Spring的上下文中,Spring就会处理好所有必要的注入过程

然而,我就是不能让它工作。研究博客等,有人提到使用过滤器提供程序,或直接使用ContextRegistry.GetContext(),但这似乎并不符合AOP

那么正确的方法是什么呢?我以为spring.net已经涵盖了这一点,但似乎没有

我引用了Spring.Web.Mvc3 v4.0.30319,我运行的是ASP.NET MVC 3

编辑:

我试过这个:

SpringMvcDependencyResolver dr=
新的SpringMvcDependencyResolver(ContextRegistry.GetContext());
然后通过
dr.GetService()获取服务这似乎使它在某种程度上起作用,但它没有得到正确的实际服务实现(在我的Filters.xml上,我将属性ref写到
TestService
),而是返回了服务的存根版本。我做错了吗?或者我必须通过
GetServices()
筛选并选择正确的一个或一些东西吗

EDIT2:

@安德烈亚斯:很抱歉回复晚了。但是,我的
Global.asax中确实有它

公共类mvcapapplication:Spring.Web.Mvc.springmvcapapplication

为了测试,我在spring配置中有以下内容:

<object type="Spring.Mvc3QuickStart.Filters.TestFilter, Spring.Mvc3QuickStart" singleton="false" >
  <property name="Message" value="This is the ActionFilter message" />
</object>
在我的控制器中,我有:

ViewData[“Message”]=Message


因此,对于这个测试项目,过滤器应该注入消息。但是输出并不像预期的那样。

Spring.Net.Mvc3的1.3.2版本似乎有点问题。在
SpringMvcDependencyResolver
中,方法
public IEnumerable GetServices(类型serviceType)
将始终失败。它应该是
returnservices.Values.Cast()
而不是
return services.Cast()。最简单的修复方法是覆盖
springmvcapapplication
BuildDependencyResolver
,并注册您自己的固定
SpringMvcDependencyResolver

我在这里创建了一个完整的解决方案:

请发布spring配置的相关部分,好吗?当您从SpringMVCapapplication派生您的global.asax时,操作过滤器的Prop注入工作ootb。@Andreas:编辑以回答您的问题:)嗯。。不确定我的编辑是否与文本正确匹配,似乎显示不好。您是否报告了此错误并进行了修复?我想,我会决定的。Spring.net现在托管在github上。@Marijn:情况是这样的。@Andreas,这是否意味着最终我仍然需要使用GetServices并筛选IEnumerable?嗯,我把自己搞糊涂了。我可以问一下,你能提供一个这个的工作样本吗?无法通过覆盖使IApplicationContext和ContextRegistry正常工作。。我可能缺少某种形式的参考。您可以在此处找到完整的示例:
public class TestFilter : ActionFilterAttribute
{
    public string Message { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Controller.ViewBag.ActionMessage = Message;
        base.OnActionExecuting(filterContext);
    }
}