8
asp.net-mvc의

컨트롤러에 종속성을 모두 주입하는 Windsor Controller Factory가 있지만 Windows Forms에서 어떻게 가져 옵니까?Windows Forms의 생성자에 종속성을 주입하는 방법

예를 들어이 Form1을 사용하는 경우 Form1의 인스턴스를 가져 오려면 어떻게해야합니까? (ServiceLocator 및 일부 패턴에 의한 패턴 방지)를 사용해야합니까?

public class Form1 
{ 
    private IBarService _barService; 

    public Form1(IBarService barService) 
    { 
     _barService = barService; 
    } 
} 

답변

5

예, program.cs에서 당신은 윈저가 Form1를 해결해야한다. 디자이너에서 양식을 볼 수 있으려면 빈 생성자를 추가하고 Obsolete 속성으로 꾸며야합니다.

+0

'Obsolete' 접근법이 작동하지 않고, 디자이너가 여전히 깨진 것을 나타냅니다. –

6

Visual Studio 디자이너가 기본 생성자를 예상하고 가정하기 때문에 양식 (또는 다른 UI 프레임 워크의 다른보기)에 대해 생성자 삽입을 사용하면 종종 문제가 발생합니다.

어떤 경우에도 양식이나 다른 시각적 컨트롤은 실제로 동작이없는 멍청한보기 여야합니다. 목적은 바인딩하는 데이터를 표시하는 것입니다. 데이터 바인딩 기능을 사용하면이 수동 디스플레이 형식을 제한하는 데 도움이됩니다.

즉, 컨트롤러 (보기 (양식)을 인스턴스화하고 데이터 소스를 바인딩 할 수 있어야 함)를 의미합니다.

WPF와 같은 기술로 수행하는 것이 훨씬 쉽지만 Windows Forms에서도 가능합니다. 영감을 얻으려면 Windows Forms에서이 작업을 수행하는 방법에 대해 (지금 은퇴 한) Composite Application Block을 살펴 보는 것이 좋습니다. 너무 복잡하기는하지만 유사하게 구현하는 방법에 대한 아이디어를 제공해야합니다.

+0

VS 디자이너 호환성을 위해 개인 기본 생성자를 제공하고 공용 생성자가 기본 생성자를 호출하도록 할 수 있습니다. –

+0

@ 마크, 몇 년 전 CAB에서 어떤 작업을했는데, 은퇴했다는 말을 듣지 못했습니다. 어디에서 은퇴 했습니까? – mreith

+1

@ Eren Aygunes : 좋은 지적 - 나는 그것을 몰랐다. 그러나 설계 관점에서 수동 뷰는 컨트롤의 개념에 더 잘 맞기 때문에 내 대답은 실제로 변경되지 않습니다. –

관련 문제