2009-11-19 2 views
7

저는 IoC에 익숙하지 않고 Winforms 응용 프로그램에서 구현하는 데 어려움이 있습니다. MVC를 사용하는 매우 기본적인 응용 프로그램 Winform 응용 프로그램이 있습니다. 모든 작업을 수행하는 하나의 컨트롤러와 컨트롤러 (분명히 컨트롤러)가 작동하는 대화 상자입니다. 따라서 모든 클래스를 program.cs의 IoC 컨테이너에로드하고 컨테이너를 사용하여 기본 폼 컨트롤러를 만듭니다. 그러나 이것이 내가 문제가있는 곳이며, 사용되는 대화 상자 컨트롤러를 사용할 때와 사용하는 문 안에서 만 만들고 싶습니다.Winforms에서 IoC를 사용할 때 컨테이너 주위를 지나치지 않는 방법

처음에는 컨테이너를 통과했지만이 것은 나쁜 습관이며 컨테이너 위의 정적은 정적이며 단위 테스트를하고 싶습니다.

그래서 컨테이너를 통과하지 않고 어떻게 단위 테스트 친숙한 방식으로 클래스를 만들 수 있습니까? 추상 공장 패턴을 고려하고 있었지만 IoC를 사용하지 않고 혼자만 문제를 해결할 수 있습니다. 내가 어떤 유명한 프레임 워크를 사용하지 않는

, 나는 http://www.kenegozi.com/Blog/2008/01/17/its-my-turn-to-build-an-ioc-container-in-15-minutes-and-33-lines.aspx

가 어떻게 IOC는이 작업을 수행 할이 블로그 게시물에서 기본을 빌려? 이것은 IoC에 대한 잘못된 사용입니까?

답변

7

Ken의 게시물은 매우 흥미 롭습니다.하지만 이제는이 시나리오를 지원하는 몇 가지 기능 만 제공하므로 "제작"IoC 컨테이너에 대해 자세히 알아볼 가치가 있습니다.

Autofac에서 예를 들어, 당신은 대리인으로 공장을 '생성'할 수

기본 형태 그리고
builder.RegisterGeneratedFactory<Func<IDialogController>>(); 

:

class MainForm ... { 

    Func<IDialogController> _controllerFactory; 

    public MainForm(Func<IDialogController> controllerFactory) { ... } 

    void ShowDialog() { 
    using (var controller = _controllerFactory()) 
    { 
    } 
    } 
Autofac 런타임시 controllerFactory 생성자 매개 변수를 입력합니다

. 단위 테스트에서는 생성자에 람다를 쉽게 제공 할 수 있습니다.

1

일반적으로 인터페이스를 팩토리 클래스에 전달하기 만하면됩니다.

+0

나는 그것에 대해 생각했지만 IoC에 대한 필요성을 완전히 제거하지 않았다. –

+0

@ L2Type : IoC/DI에는 컨테이너 라이브러리가 필요하지 않다. 이것은 IoC이다. 그러나 의존성이있는 여러 종속성이있는 클래스가있는 경우 컨테이너 라이브러리에서 구입 한 배선을 이해할 수 있습니다. – TrueWill

1

내가 가진 유일한 합리적인 해결책은 컨테이너 Singleton을 만드는 것입니다. 일부 IoC 프레임 워크는 이러한 작업을 수행하지만, Singleton의 자체 구현을 구현해야 할 수도 있습니다. Jon Skeet의 ideas을 살펴보십시오.

Winforms의 MVC와 함께 행운을 기원합니다. 가파른 학습 곡선으로, 나는 단지 상승하기 시작했습니다.

+0

이전에 WinForms에서 MVC를 구현하려고 시도했지만, MVC가 아닌 하이브리드 솔루션으로 끝났습니다. 그것은 하나의 힘든 투쟁입니다. –

+0

IoC 컨테이너의 장점 중 하나는 싱글 톤을 없애는 것입니다. 평생 관리는 컨테이너에 의해 처리됩니다. 컨테이너를 싱글 톤으로 만들면 모든 클래스를 컨테이너에 연결하므로 더 이상 클래스의 종속성을 한 눈에 볼 수 없습니다. – TrueWill

+0

클래스 종속성을 어떻게 볼 수 없습니까? 나는 앱에서 하나의 싱글 톤을 가지지 않는 것이 매우 어렵다고 생각한다. 싱글 톤을 현명하게 사용해야한다는 것을 알고 있지만, winforms 앱 (심지어 중간 정도의 복잡한 것들도)과 같은 경우에는 정당하다고 느낀다. 거기에는 컨테이너의 열정과 컨테이너의 독점적 인 콘텐트가 있습니다. –

관련 문제