지난시간에는 Repository Pattern 에 대한 간단한 개요에 대해서 알아보았습니다. 이것은 MVC에서 유행처럼 쓰이며(사실 튜토리얼에 소개되었기 떄문에) 모든 MVC의 Model 에 대한 개념은 이곳에서 나온다고 할수 있겠습니다.. 이번장에서는 지난 시간에 언급되었던 IoC를 구현하는 방법에 대해 살펴보도록 하겠습니다.

 


Dependency Injection


의존성 주입과 Inversion of Container 라는 개념은 모듈을 직접 참조하지 않고 그 인터페이스만을 참조하여서 , 참조하는 모듈과 참조하는 어플리케이션간의 결합도를 줄이는 개발 방법론입니다. 이로써 사용자는 좀더 static 하고 서로간의 결합도가 높은 – 단순하게 유지보수 하기 힘든 – 어플리케이션 개발에서 탈피해서 좀 더 유연한 프로그래밍을 할 수 있습니다. 이는 특히 유지보수에서 빛을 발하게 되는데 , 내부 모듈의 내용이 교체되는 것이 실제 어플리케이션에 영향을 주지 않기 때문입니다.

 

 

MEF(Managed Extensibility Framework)


MEF (Managed Extensibility Framework) 또한 DI 와 IoC 의 개념을 구현하기 위해서 개발된 프로엠워크의 일종입니다. 사실 이 MEF는  IoC보다는 좀더 깊은 개념의 프레임워크이지만 , MVC에서 IoC를 구현하는 하나의 방법으로도 사용되고 있습니다. MEF 에 대한 자세한 설명은 Visual Studio2010 TeamBlog 에서 엄준일 MVP님이 자세히 소개하고 있습니다. (http://vsts2010.net/13)
필자가 지난 4월 Mix행사에 참여 하였을 때 , Microsoft 에서는 Mef를 지원하는 IoC컨테이너에 대한 소개를 한 바 있습니다. 이것은 비록 Microsoft 의 공식적인 IoC 컨테이너는 아니지만 , Mef 를 지원한다는 점에서 많은 점수를 받고 있었습니다. 이는 Nuget 통해서  다운 받고 바로 적용하여 사용할수 있습니다.. Nuget 은 Microsoft 에서 새로 선보이는 모듈 다운로드 엔진으로써 이번 MVC가 도입되면서 같이 선을 보이게 되었습니다. 이 Nuget 에 대한 포스팅은 MVC 강좌가 끝난후 다시 언급하도록 하겠습니다.

그러면 이제 MEF를 이용해서 IoC를 구현하는 예제를 살펴보도록 하겠습니다.
먼저 Reference에서 우클릭 한후 그림과 같이 Add Library Package Reference 를 선택합니다.
 

 12_1.png
[그림 Add Library Package Reference]

 

 

그러면 다음과 같이 Nuget 이 동작하면서 , Microsoft 가 공급하는 여러 패키지를 인터넷에서 가져와서 보여줍니다. 이곳에서 MefContribMVC3을 설치 합니다.
 

 

12_2.png
[그림 : Nuget에서 MefContrib 설치]

 

이제 MVC에서 MEF를 사용할 준비가 다 되어있습니다.
IoC의 도식도는 다음과 같습니다.

12_4.png
 
이제 IoC에 대해서는 충분히 이해하였으니 , 예제를 통해서 구현해 보도록 하겠습니다.

 

먼저 컨트롤러에서 사용할 인터페이스를 정의하고 컨트롤러의 생성자를 구현합니다.

private IHelloService Service { get; set; }

 

public RepositoryController(IHelloService serv)

{

    this.Service = serv;

}

 

 

 

이제 컨트롤러는 만들었으니 컨트롤러가 만들 객체의 인터페이스를 만들어야 겠죠.

public interface IHelloService

{

    String GetHelloMsg();

}

 

 

이제 IoC 로 사용할 인터페이스를 구성하였습니다.  이제 이걸 상속받는 HelloService를 구현해보도록 하겠습니다.

 

[Export(typeof(IHelloService))]

public class HelloService : IHelloService

{

    public String GetHelloMsg()

    {

        return "Hello ASP.NET MVC";

    }

}

 

 

 

그리고 실행..

 

 12_3.png
[그림]


정상적으로 MEF가 구동되어 HelloWorld class의 GetHelloMsg 를 실행한 것을 확인할수 있습니다.

Summary
IoC는 요새의 프로그래밍에서는 유행을 탄다는 이야기가 나올정도로 급속도로 전파되고 있는 개념입니다. MVC도 다른 여러 IoC 컨테이너를 구현하고 있지만 , MEF와 함께하는 IoC는 상당히 간단하게 강력한 기능을 구현할 수 있습니다. 다음장에서는 웹개발에 필수적인 자바스크립트를 MVC 에서 활용하는 방법에 대해서 살펴보도록 하겠습니다.




ASP.NET MVC3 시리즈 강좌 리스트
[ASP.NET MVC3강좌] 1. MVC(Model- View – Controller) 란 무엇인가.
[ASP.NET MVC3강좌] 2. MVC 환경 세팅
[ASP.NET MVC3강좌] 3. HelloWorld MVC
[ASP.NET MVC3강좌] 4. Layout , Partial Page
[ASP.NET MVC3강좌] 5. Model 을 View에서 표현하기
[ASP.NET MVC3강좌] 6. MVC의 매력적인 기능 스캐폴딩!(With EF)
[ASP.NET MVC3강좌] 7. 유효성 검사
[ASP.NET MVC3강좌] 8. ModelBinder
[ASP.NET MVC3강좌] 9. MVC ActionResult 종류 살펴보기
[ASP.NET MVC3강좌] 10. MVC 처리 프로세스 & ActionFilter
[ASP.NET MVC3강좌] 11. Global.asax
[ASP.NET MVC3강좌] 12. (번외편) Repository Pattern
[ASP.NET MVC3강좌] 13. MEF(Managed Extensibility Framework) in MVC
[ASP.NET MVC3강좌] 14. Javascript in MVC
[ASP.NET MVC3강좌] 15. Javascript Intellicense in Visual Studio
[ASP.NET MVC3강좌] 16. JSON in MVC - 1
[ASP.NET MVC3강좌] 17. JSON in MVC - 2
[ASP.NET MVC3강좌] 18. HTML5 in MVC
[ASP.NET MVC3강좌] 19. MVC Tips 1 - HandleUnknownAction
[ASP.NET MVC3강좌] 20. MVC Tips 2 - Cache ActionFilter





profile

ASP.NET MVP 2009~2011