2011-04-10 3 views
0

저는 Spring.NET과 Caliburn v2와 함께 프로젝트를 진행하고 있습니다. 인스턴스화하려고하는 일부 객체가 있지만 어떻게 이동해야하는지 확신 할 수 없습니다.Spring.Net/Caliburn v2 종속성 지옥?

저는 Caliburn의 IoC aspect 애노테이션 (Singleton과 PerRequest)을 사용하여 객체를 Spring 컨텍스트에 가져 왔습니다. 이 문제는 두 개의 객체 A와 B가 있는데, 객체 B는 객체 A의 하위 클래스 (B는 A 임)라는 점입니다. 즉, 두 가지 모두를 등록하면 A 유형의 객체가 요청 될 때 Spring에서 모호함을 표시합니다. 이 문제를 해결하기 위해 Caliburn의 IoC 기능을 사용하지 않고 개체를 등록하고 대신 Spring 컨텍스트 XML 파일에 등록 할 수있었습니다. 그런 식으로 스프링 컨텍스트 파일에 명명 된 객체를 지정하여 객체 C의 생성자에서 사용할 수 있습니다.이 객체에는 유형 B의 객체가 주입되어야합니다.

그러나 이것은 새로운 문제를 만듭니다. Object B는 Caliburn 창 관리자를 주입해야합니다 (컨텍스트 XML 파일에 나열된 객체가 인스턴스화 될 때 Spring 컨테이너에서 사용할 수 없지만 나중에 Caliburn이 자체 객체를 Spring에로드하고 추가 한 후에 만) 컨테이너).

나는 단순히 상속을 제거하고 객체 A와 B 사이에서 몇 가지 코드 중복이 발생할 수 있지만 OO 프로그래밍의 요점은 무엇일까요? 그렇지 않으면 Spring.NET 컨텍스트 XML에서 객체를 지정하는 방법을 찾고 있지만 Caliburn이로드 될 때까지 해당 객체가 유지되지 않도록해야합니다.

아이디어가 있으십니까?

답변

0

필자는 caliburn-dependent 스프링 컨텍스트 XML 파일의 별도 목록을 유지 관리하여이를 해결할 수있었습니다. 내 응용 프로그램의 부트 스트 래퍼에있는 재정의 된 DisplayRootView() 메서드의 시작 부분에 다음 코드를 추가하여 ApplicationContext 객체에로드했습니다.

1

나는 Caliburn에 익숙하지 않아요하지만 당신은 이런 식으로, 당신은 XML로 게으른 초기화에 객체를 표시 할 수있는 인스턴스 생성을 지연 할 경우 : <object id="foo" type="..." lazy-init="true"/>

들이 인스턴스화 될 것이다이 방법을 먼저 그들을 요청할 때