1

내 SpringMvcApplication (Spring.Web.Mvc)에 속성을 삽입하려고합니다. ASP.NET MVC Global.asax 스프링과 함께

public class MvcApplication : SpringMvcApplication 
{ 
    public ISomeService SomeService { get; set; } 

    protected void Application_AuthenticateRequest(object sender, EventArgs e) 
    { 
     // Use SomeService 
    } 
} 

은 그 때 나는 내가 null 참조 예외를 얻을, 나는 SomeService 속성을 사용하려고 할 때마다 내 정의
<?xml version="1.0" encoding="utf-8" ?> 
<objects xmlns="http://www.springframework.net"> 
    <object name="HttpApplicationConfigurer" type="Spring.Context.Support.HttpApplicationConfigurer, Spring.Web"> 
    <property name="ApplicationTemplate"> 
     <object> 
     <property name="SomeService" ref="ISomeService" /> 
     </object> 
    </property> 
    </object> 
    <object id="ISomeService" type="WebProject.Services.SomeService, WebProject"> 
    <constructor-arg ref="UserService" /> 
    </object> 
</objects> 

를 포함하는 services.xml의 파일이 있습니다. 구성이 잘못 되었습니까? 추가 구성이 필요합니까?

그 적절한 보이지 않는다 지금 내 해결은에 이상한의 종류를 보이는 나에게 그래서이

protected override void ConfigureApplicationContext() 
{ 
    base.ConfigureApplicationContext(); 

    SomeService = (ISomeService)ContextRegistry.GetContext().GetObject("ISomeService"); 
} 

답변

3

MvcApplication에서, SpringMvcApplication 클래스, 실제로 세트까지 Spring.net 컨텍스트을 확장하다 di를 사용하여 속성을 구성하십시오.

이제 재정의하는 방법은 asp.net mvc 인프라로 전달되기 바로 전에 Spring.net 응용 프로그램 컨텍스트를 마지막으로 두 번째로 변경할 수 있도록하기위한 것입니다.

좀 더 나은 해결 방법은 SomeService가 getter에 직접 컨텍스트에 액세스하도록하는 것입니다. 이 방법을 사용하면 스프링 관리 객체 스코프의 장점을 얻을 수 있습니다.

+0

내 서비스에 대한 참조를 얻는 방법을 알 수 없기 때문에 지금은이 방법을 재정의하고 있습니다. 따라서 Erich Eichinger의 [this post] (http://forum.springframework.net/showthread.php?t=5378)의 지침을 따르는 대신 제 게터에 논리를 넣는 것이 좋습니다. 컨텍스트에 직접 액세스 할 때, 재정의 된 메서드에있는 것처럼 Context.GetContext()를 사용한다는 의미입니까? 죄송합니다. 바보 같은 질문이라면, 나는 전에 스프링을 사용한 적이 없습니다. – Chris

+0

어리석은 질문이 아닙니다 ... 저는 기존의 해결 방법에 대한 개선을 제안하는 것일뿐입니다. 그러나 여전히 해결 방법으로 고려해야합니다. 당신이 언급하는 게시물은 고전 asp.net 지원을 우려하는 것 같아요, 그리고 그것이 봄 mvc에 대해 보유하고 있는지 모르겠습니다. – Marijn

+0

예, 위와 같이 Context.GetContext를 사용하는 것이 좋습니다. 그러나 이것은 일반적으로 피해야 할 사항이므로 명확한 해결책 대신 개선 된 해결 방법을 고려하십시오. – Marijn