2011-08-29 3 views
1

Spring.NET에서 lookup-method 태그 접근 방식을 사용하여 런타임에 동적으로 Windows Forms를 만드는 코드 조각이 있습니다. 기본적으로 내가 가지고있는 것은 폼의 수를 만드는 팩토리 클래스이다. 아래의 설정 파일 스 니펫을 보라.Howto : 동적으로 생성 된 뷰 (비 - 싱글 톤 형식)를 Spring.NET 구성 파일로 싱글 톤 컨트롤러에 연결 하시겠습니까?

<object id="frmListView" type="GUI.View.ListView, MMM" singleton="false"> 
    <property name="MdiParent" ref="frmMainForm" /> 
</object> 

<object id="frmListViewController" type="Controller.View.ListView, MMM"> 
    <listener event="Search" method="frmListView_Search"> 
     <ref object="frmListView"/> 
    </listener> 
</object> 

<object id="frmListViewFactory" type="GUI.ListViewFactory, MMM"> 
    <lookup-method name="createView" object="frmListView" /> 
</object> 

문제는 frmListView가 동적으로 생성되기 때문에 listener -tag가 결합하지 않는 것처럼, 즉 검색 이벤트는 모든 이벤트 리스너에 바인딩되지 않습니다 보인다는 것이다. 분명히 코드에서 바인딩을 수행하여이 문제를 해결할 수 있지만 컨텍스트 파일에서 바인딩을 수행 할 수있는 방법이 있는지 알고 싶습니다. lookup-method 공장 전체 아이디어는 봄 인식 생성 frmListView 인스턴스를 가지고 있기 때문에

나는 그것이 약간 이상한 발견하고는 예상대로 MdiParent 속성을 설정 즉, 어느 정도이지만에서 분명히 청취자 참조 싱글 톤 frmListViewController이 해결되지 않았습니다.

이 문제에 대한 도움을 주시면 감사하겠습니다.

감사 올라

답변

1

사실은 내가 전혀 XML로 가능한 경우도 확실하지 않다는 XML 설정에서이 작업을 수행하는 방법을 모르겠어요. 그러나 접근 방식이 작동하지 않는 이유를 설명 할 수 있습니다.

이 구성을 사용하면 frmListView에서 Search 이벤트에 가입하는 단일 톤 frmListViewController을 생성합니다. 이 frmListView은 컨테이너에서 요청되며 프로토 타입 (싱글 톤이 아님)이기 때문에 새 ListView 인스턴스가 만들어집니다. 음,이 구성 년대 방법 때문에

귀하의 frmListViewController 것이다 ListView 인스턴스에서 Search 이벤트를 수신. 리스너 참조가 확인되었지만 예상하지 못한 ListView 인스턴스로 해석됩니다.

ListView 인스턴스는 컨테이너가 초기화 된 후 frmListViewFactory 생성의 일부로 만들어지는 것을 볼 수 있습니다. frmListViewFactoryCreateView 방법은 존재하지 않고,

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     IApplicationContext ctx = new XmlApplicationContext("objects.xml"); 

     Console.WriteLine("Container initialized ... "); 
     Console.WriteLine("Enter to exit"); 
     Console.ReadLine(); 
    } 
} 

당신은 새로운 ListView가 생성되는 것을 관찰 할 수 있습니다 : 당신은 ListView 생성자에서 중단 점을 설정하여 (예를 들어) 시험 및 이와 유사한 프로그램을 실행할 수 있습니다 라는.

BTW, 조회 방법 주입 목적은 is not to make frmListView and frmListViewFactory aware of their container입니다.