2

있지만 구체적인 답변 (I이 매우 새로운 오전)에서 Spring.NET DI 주입 ... Spring.NET은 ASP를 지원하는로액션 검색을 시도 필터 (ASP.NET MVC 3)

을 수행하는 방법. NET MVC 3, 어떻게 행동 필터 내부 종속성 주입을 할 수 있습니까? 주변에서 공부했지만 전혀 실마리가 없습니다! :/

Spring.NET 다큐멘터리에서, 이것은 모두 처리되었으므로 필요한 것은 스프링의 컨텍스트에 액션 필터를 등록하고 스프링이 모든 필요한 주입을 처리한다는 것입니다. 방법.

http://www.springframework.net/doc-latest/reference/html/web-mvc3.html

그러나, 나는 그냥 일을 얻을 수 없습니다. 거기에 등 블로그를 주위에 공부하는 것은 ContextRegistry.GetContext()를 사용하여 직접 필터 공급자를 사용 또는 언급 된, 그러나 이것은 AOP을 준수 나타나지 않습니다 .. 그래서

Spring.Net & Attribute Injection

Using Spring.Net to inject dependencies into ASP.NET MVC ActionFilters

이 일을하는 올바른 방법은 무엇입니까? 나는 이것이 spring.net에 의해 이미 다뤄졌다고 생각했지만 그것은 그렇지 않다.

나는 Spring.Web.Mvc3 v4.0.30319를 기준으로, 나는 ASP.NET MVC에 3

편집 실행하고 있습니다 :

SpringMvcDependencyResolver dr = 
     new SpringMvcDependencyResolver(ContextRegistry.GetContext()); 

: 나는이 시도

을 그리고 나서 dr.GetService<ITestService>();을 통해 서비스를 받는다. 이것은 다소 효과가있는 것처럼 보이지만 올바른 실제 서비스 구현을 얻는 대신 (내 Filters.xml에서 TestService에 대한 속성 참조를 썼다), th e 서비스의 스텁 버전. 내가 잘못 했니? 또는, 내 몸을 가리고 GetServices()을 통해 올바른 것을 선택해야합니까?

EDIT2 :

@Andreas : 늦은 답변 죄송합니다. . 그러나, 내 Global.asax이 그것을 가지고있다

public class MvcApplication : Spring.Web.Mvc.SpringMvcApplication

테스트하기 위해, 나는 나의 봄의 설정이 있습니다 : 내 컨트롤러에서

public class TestFilter : ActionFilterAttribute 
{ 
    public string Message { get; set; } 

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

: 내 필터에서

<object type="Spring.Mvc3QuickStart.Filters.TestFilter, Spring.Mvc3QuickStart" singleton="false" > 
    <property name="Message" value="This is the ActionFilter message" /> 
</object> 

나는 이것을 가지고있다 :

ViewData["Message"] = Message;

순전히이 테스트 프로젝트에서 필터에는 메시지가 삽입되어야합니다. 그러나 생산량이 예상과 다를 수 있습니다.

+0

어떤 도움을하시기 바랍니다 :

는 여기 호스팅 완벽한 솔루션을 만들어? :) – RicL

+0

스프링 구성의 관련 부분을 게시 할 수 있습니까? Propion injection to action 필터는 SpringMvcApplication에서 global.asax를 파생시킬 때 작동합니다. – Andreas

+0

@Andreas : 질문에 대한 답변을 편집했습니다. 흠 .. 내 편집 내용이 텍스트와 제대로 일치하는지 정확히 알 수 없거나 잘 보이지 않는 것 같습니다. – RicL

답변

1

Spring.Net.Mvc3의 1.3.2 버전은 조금 버그가 있습니다. SpringMvcDependencyResolver에서 방법 public IEnumerable<object> GetServices(Type serviceType)은 항상 실패합니다. return services.Cast<object>(); 대신 return services.Values.Cast<object>();이어야합니다.가장 간단한 해결 방법은 BuildDependencyResolverSpringMvcApplication으로 대체하고 자신의 고정 SpringMvcDependencyResolver을 등록하는 것입니다. https://gist.github.com/1262927

+1

이 버그를 신고하고 해결 했습니까? appdeciated 것입니다, 제 생각 엔. Spring.net은 이제 github에서 열립니다. – Marijn

+0

@Marijn : 사례는 [SPRNET-1473] (https://jira.springsource.org/browse/SPRNET-1473)입니다. – Andreas

+0

@Andreas, 결국 GetServices를 사용하고 IEnumerable을 탐색해야한다는 의미일까요? 흠, 혼란스러워. 물어볼 수 있습니다. 친절하게이 문제에 대한 샘플을 제공해 주시겠습니까? 실제로 IApplicationContext와 ContextRegistry를 오버라이드 (override)를 통해 처리 할 수 ​​없습니다. 어떤 형식의 참조가 누락되었을 수 있습니다. – RicL