2012-03-16 2 views
3

처리 할 클래스가 내 응용 프로그램과 네트워크 사이의 소켓을 통해 &을 통해 전송됩니다. 이 클래스는 하위 수준의 소켓 소켓 연결 클래스와 수신 된 데이터를 보내고 처리 할 메시지를 만드는 PDU 처리기 클래스를 비롯한 다른 클래스를 사용합니다.자동 런타임에 사용자 지정 이벤트 생성

낮은 수준의 연결 클래스에 데이터가 있고 그 데이터를 PDU 처리기로 보내서 응용 프로그램에서 사용할 수있는 정보로 변환 한 다음 응용 프로그램에 데이터를 전달해야한다는 신호를 내 이벤트에 사용합니다. .

향후 사용을 위해 클래스를 가능한 한 포괄적으로 만들려고합니다. 향후 서버/클라이언트 프로젝트에서 새 작업을 고려하여 PDU 처리기를 변경해야합니다. 데이터를 처리합니다.

모든 것이 잘 진행되고 있으며 이제는 데이터를 앱에 다시 전달하는 문제에 직면하고 있습니다. 이를 위해 논리적 인 접근 방식은 데이터를 수집 할 준비가되었음을 앱에 알리는 이벤트입니다. 그 동안 나는 중 하나를 수행 할 수 있습니다 :

가) 하나의 이벤트가 운전 코드 당 하나 개의 이벤트를 가지고 밖으로 정렬이) B) (드리겠습니다 작동 코드를 통해 메시지의 어떤 종류의 응용 프로그램을하자 앱이 모든에 가입해야 따라서 무엇이 시작되는지 알 수 있습니다.

일을 일반화하고 b에 명시된 접근 방식을 고려하면 런타임에 지정된 대리인 서명을 기반으로 이벤트를 생성하는 방법이 있습니까?

e. 지. 당신이 MyOperation1 및 MyOperation2라는 열거의 옵 코드가 있고 같은 대리자를 정의 상상 :

public delegate void PDUEventHandler(ParamType Param, [...]); 

그리고 난라는 이벤트를 정의하려면 :

public event PDUEventHandler MyOperation1; 
public event PDUEventHandler MyOperation2; 

을하지만 난 새로운 작동 코드를 추가하는 경우 그것을위한 이벤트가 필요할 것입니다.

이 이벤트를 다이너스없이 만들 수 있습니까? 아니면 직접해야합니까? 내가 손으로 그것을 해야하는 경우 단일 이벤트가 더 좋을 것 같아요 및 애플 리케이션 측면을 처리합니다.

+0

나는 A 옵션을 사용하여 이벤트를 처리하기 위해 Chain of Responsibility (http://www.dofactory.com/Patterns/PatternChain.aspx)와 같은 패턴을 사용해야한다. 아마도 MEF (http : // msdn Microsoft.com/ko-kr/library/dd460648.aspx)를 사용하여 각 종류의 작업 코드를 처리 할 개체를로드합니다. – Fabio

+0

흥미로운 프레임 워크 - 그것에 대해 알지 못했습니다. - 처리기 당 하나의 클래스 (내 경우에는 작업)가 과도하게 보일지라도 - 너무 깊이 들여다 보겠습니다. - 감사합니다. – 537mfb

답변

1

아마 여러분이 필요로하는 것은 콜백입니다. 기본적으로 핸들러가 완료 될 때 실행할 위임자를 이벤트 핸들러에 전달합니다. Here's a stackoverflow thread to give you an idea

이벤트 핸들러 & 재사용 가능성과 관련하여 EventArgs를 확장하고이 대리자를 속성으로 사용할 수 있습니다.

편집 :

나는 하나의 PDUEventHandler가 공통 코드 및 사용자 지정 코드가 실행되는 "구멍"을 가지고 생각했다. 해당 사용자 지정 코드는 대리자 (즉, 메서드) 또는 클래스 인스턴스로 처리기에 전달됩니다. 하지만 조금만 바꾸어 봅시다 ...

factory과 같은 소리가납니다. 실제로 당신은 사실 공장을 묘사하고 있습니다.

개념적으로 특수 opcode를 EventHandler 그 자체로 전달하거나 멀티 서명 PDUEventHandler을 전달할 생각을 버리십시오.

PDUHandlerFactory 클래스를 만듭니다.팩토리는 사용자 정의 인스턴스를 일반 PDUHandler 클래스 참조로 반환합니다. 그런 다음 PDUEventHander 대신 호출자에게 출고시 사용자 지정 인스턴스를 가리키는 PDUHandler 참조가 있습니다.

+0

죄송합니다 - 이해하지 못했습니다. 무슨 뜻인지 - 본질적으로, C# 이벤트는 콜백입니다. 그래서 제가 앞에서 말한 것입니다. - 메인 클래스에 n 개의 이벤트를 등록하기 위해 앱의 필요성으로 돌아가는 것보다 발생하는 이벤트에 델리게이트를 보내는 것을 의미한다면 그 클래스는 그것을 연결하는 작업을 알 필요가 있습니다 - 또는 당신을 잘못 이해하고 있습니까? – 537mfb

+0

그 공장 아이디어가 갈 수있는 방법일지도 - 조사해야 할 것입니다 - havent는 soooo에있는 공장에서 오래 일했습니다 - 감사합니다. – 537mfb

관련 문제