2010-01-24 4 views
1

WinForms 응용 프로그램에서 Ninject를 사용하고 싶습니다. 내 사용자 컨트롤에 사용하는 방법을 알아낼 수 없습니다. 때때로 그들은 DI 프레임 워크를 통해 구성하고자하는 서비스에 의존합니다. 이러한 컨트롤은 디자이너를 통해 관리 할 수 ​​있어야합니다 (따라서 기본 생성자가 필요합니다).Ninject를 사용하여 외부에서 생성 된 객체에 종속성 삽입 (사용자 정의)

그래서이 사용자 정의 컨트롤의 속성에 의존성을 주입 할 수 있습니까? 디자이너가이를 구성 할 수 있어야하므로 kernel.Get<TestClass>은 여기에서 작동하지 않습니다. Form_OnLoad() 메서드의 종속성을 "채울"수있는 메서드 나 코드가 있습니까?

또 다른 예제를 생각해 볼 수 있습니다. 이미 기존 개체의 속성을 삽입하고 싶지만 WinForms 사용자 컨트롤은 설명하기 쉽습니다.

답변

2

나는 생각을 뒤집을 필요가 있다고 생각합니다. Model View Controller에서보기에는 하나의 책임 만 있습니다. 데이터를 표시하는 것입니다.

데이터가 컨트롤러의 책임이며 어떻게 메모리에 표시되는지는 모델에 의해 결정됩니다.

Windows Forms에 대한 특정 MVC 프레임 워크는 없지만 수동으로 만들 수 있습니다. 또는 (지금 은퇴 한) Composite Application Block을 살펴볼 수 있습니다. CAB는 대부분의 사람들의 취향에 너무 복잡합니다.) 현재 사용할 수있는 더 우아한 옵션이 있지만 WPF가 관련되어 있습니다.

어떤 경우 든 뷰에 종속성을 주입하는 대신 컨트롤러에 주입하고 컨트롤러가 뷰 (컨트롤)를 인스턴스화하고 올바르게 채울 수있게하십시오.

이렇게하면 컨트롤에 DI 문제가 없도록 할 수 있습니다.

+0

좋아, 컨트롤러가 결국 의존성을 가져야한다는 것을 알았습니다. 먼저 MVC 뷰를 생성 한 다음 컨트롤러를 생성합니다. 사용자 컨트롤은 항상 폼이나 다른 컨트롤에 의해 생성되기 때문에 별도의 경로를 따라 컨트롤러를 만들어야합니까? – Nathan

+0

myControl에 [Inject]와 속성이있는 경우 kernel.Inject (myControl)을 사용하는 것이 잘못 되었습니까? – Nathan

+0

Ninject 자체에 의존성이 있다는 것을 깨닫는 한 그렇게 할 수 있습니다. –

1

DI 도구를 사용하여 종속성 삽입을 사용하여 Windows 양식에서 작업 할 수 있다고 생각합니다. 모두 구현하기 쉽기 때문에 MVC 예제를 수행합니다 (새롭고 독창적 인 것처럼 우리 주위를 떠 다니는 경우 같은 예제). winforms 또는 WPF를 사용하여 답변을 얻는다면 도움이 될 것입니다.

이 답변은 기본적으로 말합니다 - 어쨌든 컨트롤러에 주입하고보기를 채우는 것을 정말로 모릅니다 - 정말요? MVC로 돌아 가기? 다시 - winforms.

+0

두 번째 단락을 이해하지 마십시오. 응답하는 사람들이 MVC 로의 전환을 제안해서는 안된다는 말입니까? 개인적으로 ASP.NET WinForms를 사용하며 대규모 응용 프로그램을 MVC로 다시 작성할 계획이 없습니다. –

관련 문제