2015-01-15 1 views
1

내보기가 Windows Form 인 시나리오를 직면하고 있으므로 해당 생성자를 호출 한 후에 Presenter 수업.한 매개 변수를 수동으로 전달해야하고 두 번째를 해결해야하는 경우 구조 맵을 구성하는 방법

Presenter(IView, IRepository)

지금 이상적으로 내가보기가 첫 번째 매개 변수 자체를 전달하지만 StructureMap가 주입하자 싶어 : 내 발표자는 하나의 뷰이고 두 번째는이 같은 저장소입니다, 두 개의 인수를 취하는 생성자가 두 번째 매개 변수. 그래서 내보기에서 나는 하나 개의 매개 변수

Presenter(IView)

와 발표자 클래스의 다른 생성자를 호출하고 어떻게 든 저장소를 해결하기 위해 구조 맵을 말하고 싶어.

이것이 가능한지 확실하지 않습니까? 이런 시나리오에 직면 한 사람이 있습니까? 그렇다면 DI 프레임 워크에 의존하지 않고 어떻게 처리 할 수 ​​있습니까?

감사

그것은 당신의 윈도우 형태로 StructureMap IContainer의 인스턴스를 주입하는 것입니다 가장 좋은 건 같은 소리

답변

0

후 이렇게합니다 (viewParam 문자열이 Presenter에 매개 변수의 이름을 여기서처럼 Presenter 클래스를 해결 클래스) : 당신이 그렇게를 구성한 경우

... 
    public Form(IContainer container) 
    { 
     IPresenter presenter = container.With("viewParam").EqualTo(new YourView()).GetInstance<IPresenter>(); 
    } 
... 

StructureMap는 자동으로 IRepository 매개 변수에 대한 종속성을 해결해야한다.

편집

또 다른 옵션은 빌더 클래스를 생성하고 그 대신를 주입하는 것입니다. 빌더 클래스는 생성하는 종속성이 StructureMap 경계 외부에있는 좀 더 많은 사용자 정의를 필요로 할 때 자주 사용되는 팩토리 클래스와 매우 비슷합니다. See this answer for an example.

+0

입력하신 내용을 감사드립니다. 예, 나에게 이것이 마지막 옵션처럼 보입니다. 이 경우 유일한 옵션인데, 내 인터페이스를 통해 DI 컨테이너를 추상화하고 IResolveDependencies.GetInstanceOf 같은 것을 호출하면 더 좋을 것입니다. ()? 실제 DI 컨테이너를 추상화하여 모든 프레임 워크로 대체 할 수 있습니다. –

+0

네, 확실히 다른 가능성이 있습니다. 제가 언급하고자했던 한 가지 옵션은 빌더 클래스를 주입하는 것입니다. 자세한 내용은 업데이트 된 답변을 참조하십시오. –

+0

감사합니다. 현재 상황에서 이것이 최선의 해결책이라고 생각합니다. –

관련 문제