ASP.NET2009.04.15 18:07
당연히 잘 되겠지 라는 생각을 하며, 이 글을 쓰려고 자료 찾고 시행착오 겪고 한게 벌써 8시간 째다.
자료가 이렇게도 없다니 ㅠㅠ, 아마 ASP.NET MVC 에 SPRING.NET 의 Facade 패턴의 DI 를 직접 구현 한 첫번째 글이 될것 같다. ㅡㅡ; 약간 비슷한 자료는 많이 찾았는데, 구현 하고자 하는 자료가 없어서 엄청 애 먹었다.

이전 강좌에서 참조 추가를 했는데, 몇개가 빠져 다시 확실하게 추가 하고 넘어가자.
참조 추가 하는 방법은 아니깐 참조된 파일만 나열하자면... 우선 일반적으로 SPRING.NET 을 설치 하였다면 참조할 경로는 C:\Program Files\Spring.NET 1.2.0\bin\net\2.0\release 이다. 여기서,

antlr.runtime.dll
Common.Logging.dll
Spring.Aop.dll
Spring.Core.dll
Spring.Web.dll

이렇게 다섯개를 참조 하면된다. antlr.runtime 은 아직 잘 모르겠고, 하다보면 뭐 하는 녀석인지 알게 되겠지.. ㅡㅡ; 참고로 www.antlr.org 에 가면 자세한 설명이 있다.

Common.Logging 은 원래 스프링이 자바버전에는 미니 Log4j 를 가지고 있다. 마찬가지로, 스프링 프레임웍으로 개발을 할때 스프링 자체적으로 뱉어내는 로그 들을 확인해 보기 위해 추가 한다. 안해도 상관없지만, 자동으로 콘솔창에 로그가 찍히는걸 보고 싶으면 추가!!

이렇게 추가 했으면, 처음으로 해야 할 것이 web.config 를 수정해야 하는 일이다.


... 이라고 된 부분은 프로젝트 생성할때 만들어 지는 코드 이므로, 해당 섹션에 맞게 위 코드를 추가 하면 된다.

그리고 web.config 와 같은 위치에 objects.xml 이라는 파일을 하나 생성 하고 코드는 아래와 같이 넣는다.


폴더 구조가 아래 그림과 같도록 Service 폴더를 하나 추가 한다. 추가 후에 SpringBoardFacade.vb 라는 인터페이스와 SpringBoardImpl.vb 클래스, SpringControllerFactory.vb 클래스를 만든다.

SpringBoardFacade.vb 는 아래와 같다.


SpringBoardImpl.vb 는 아래와 같다.


SpringControllerFactory.vb 는 아래와 같다.


그리고, Global.asax 의 Application_Start() 메서드에 다음과 같이 한줄을 추가 하도록 한다.

위 세 코드를 설명하자면, 우선 SpringBoardFacade 인터페이스는 SpringBoardImpl 클래스의 인터페이스 이다. SpringBoardImpl 클래스는 Facade 패턴에 쓰일 가장 중요한 클래스 이고, iBATIS.NET 과 연동할때 중심이 될 클래스 이다.
코드에 그냥 Test() 라는 메서드 하나를 둔게, ASP.NET MVC 에서 라우팅을 통해 컨트롤러로 갔을때 제대로 DI 가 되는지 테스트 해 보기 위해서 넣은 코드이다. 실제 게시판 코딩할때는 삭제 될 메서드 이다.

마지막으로 SpringContrllerFactory 클래스는 Global.asax 에서 어플리케이션 스타트 할때 objects.xml 을 미리 로드 하기 위한 System.Web.Mvc.IControllerFactory 구현부 이다.

그럼 마지막으로, HomeController.vb 를 다음과 같이 수정한다.

SPRING Framework 이나 오픈소스 프레임웍의 가장 단점이 세팅하기가 정말 어렵다는 점인데, 역시나 오늘 하루 출근해서 계속 요것만 한것 같다. ㅠㅠ

이렇게 코딩을 하고, 세팅한 이유는 위 HomeController 클래스의 19번째줄 Debug.Pring(sbFacade.Test()) 요게 제대로 나오는지 테스트 한 것이였다. ㅡ..ㅡ;
 
ASP.NET MVC 위에서 MVC 흐름을 자연스럽게 타면서, SPRING.NET 의 Core 부분의 DI를 구현 해 본것이다.

실행후 직접 실행창에 다음과 같은 로그가 찍히면 성공!!


사실 여기 까지의 셋팅이 자바에서도 마찬가지로 굉장히 힘들었던 부분이다.

다음 포스팅에서는 iBATIS.NET 을 붙이는 작업을 하도록 해야겠다.
Posted by dotnetpower

댓글을 달아 주세요

  1. 황선우

    C#으로 따라하고 있습니다 ^^
    테스트 프로젝트의 HomeCotroller 에서 에러가 납니다.
    HomeController 의 생성자 매개변수가 추가되서 그런 것 같은데요.
    일단 테스트 프로젝트의 HomeCotroller.cs를 삭제를 하고 빌드는 됩니다.

    근데 빌드된뒤 SpringControllerFactory.cs에서 NullException 에러가 나네요
    희한하게 favicon.ico 가 없다는 에러가...

    열심히 따라하고 있으니까 ^^ 끝까지 잘 마무리해주세요
    언제나 건강하고 행복하시고 즐프하시길~

    2009.04.21 10:35 [ ADDR : EDIT/ DEL : REPLY ]
    • 포스팅 하면서 뭔가를 빠뜨린것 같네요..
      http://dotnetpower.tistory.com/36 에 5번째 강좌까지의 소스포함되어 있으니 참고 바랍니다.

      2009.04.22 15:35 신고 [ ADDR : EDIT/ DEL ]
  2. 저 이렇게 하신 이유를 잘 모르겠습니다. ASP .NET MVC의 ControllerFactory에서 이미 저 HomeController를 가지고 있기 때문에 저렇게 할 필요가 없는 것 아닌가요?? 결국은 MVC의 DefaultControllerFactory와 하는 일이 차이가 없는 코드가 된 것 같은데요. 이부분에 대한 설명좀 부탁드리겠습니다. 감사합니다.

    2010.02.23 16:09 [ ADDR : EDIT/ DEL : REPLY ]
    • 어떤 부분을 말씀하시는지 잘 모르겠지만, 우선 SpringControllerFactory 는 요청시 Web.config 에서 aspx 페이지 핸들러를 가로채기 위한 방법이고, HomeController 쪽은 Spring.net 으로 종속객체 주입을 위한 방법입니다. 지금은 프로젝트가 작아서 불필요해 보일수도 있지만, 프로젝트가 커지고 관리되는 모듈이 많을때 유지보수가 유용한 방법입니다.

      2010.02.24 09:32 신고 [ ADDR : EDIT/ DEL ]