2009-04-06 3 views
0

응용 프로그램을 시작할 때 기본 데이터 집합을 만들기 위해 특정 파일을 읽는 데 필요한 몇 가지 클래스가 있습니다.클래스 초기화 중 응용 프로그램 종료 이벤트에 응답

이 작업을 수행하는 논리적 인 장소는 Shared 클래스 생성자입니다. 기본 파일을 읽지 못하면 클래스 수준의 이벤트를 던지는 것이 좋습니다. 불행하게도,이 이벤트에 접근하려고 시도하는 것처럼 동작하지 않습니다. 핸들러를 핸들러에 연결하기 위해, 이벤트가 첨부 된 전에 전에 클래스 생성자를 시작합니다. 실패한 경우에는 생성자가 시작되고 실패 이벤트가 발생하고 생성자가 완료된 다음 이벤트가 발생한 후 이벤트 핸들러가 연결됩니다. 내가 생각할 수있는

다른 유일한 해결책은 클래스에게 "typeInitialisedSuccessfully"부울 속성을주고 나에게 불필요하게 kludgey 것 같습니다 클래스의 인스턴스를 생성하는 모든 호출 주위에 try/catch 블록을 배치하는 것입니다.

누군가보다 세련된 해결책을 제안 할 수 있습니까?

EDIT : 거의 모든 소프트웨어 도구에서 하나의 양식 또는 다른 형식으로 사용되는 기본 클래스이므로 이후 프로그래머에게 형식 초기화 프로그램을 호출해야한다는 것을 알려주는 솔루션을 선호합니다. 처음에는 Shared Constructor쪽으로 솔루션으로갔습니다.

답변

2

클래스에 Init (정적 일 수 있음) 메서드를 사용하는 것이 좋습니다. 초기화 할 각 클래스에 대해 응용 프로그램 시작시이 메서드를 실행합니다. 이 경우에 잡아서 그에 따라 행동 할 수 있습니다. 당신의 편집 다시

가 : 는 일반적으로 공유 생성자 같은 장소에서 예외를 던지는 것은 좋은 생각입니다 - 당신이 정말로 그것을 잡을 수 없다, 당신이 I를 지정하는 경우 초기화가

를 등 호출 될 때 예측하기 어렵다 선택되어있는 IsInitialized 필드와이를 요구하는 method/property를 호출 할 때 예외가 발생합니다. 그것은 지루할 수 있습니다.

다른 옵션은 현재 아키텍처에서 멀리 떨어져있을 수도 있습니다. 많은 IoC 도구에서 그들은 Startable (castle, autofac) 개념을 사용합니다. 즉, 시작 방법으로 인터페이스를 지정하면 IoC는 메소드가 지정된 시간 (대부분 응용 프로그램이 시작될 때)에 실행되는지 확인합니다. 'Start'메소드에서 오류 처리를 수행하고 모든 세부 정보가 포함 된 예외를 버블 링합니다. 나는 이것에 대해 자세히 설명 할 수는 있지만 실제로 갈 길이 없다고 생각합니다.