2012-09-03 6 views
1

주식 표준 ASP.NET MVC 3 웹 응용 프로그램이 있습니다..NET에서 이벤트 디스패치

나는 여러 가지 문제에 직면 해 있으며 AOP, 특히 이벤트 발송자 패턴을 사용하고 싶습니다.

예를 들어 무언가가 발생하면 컨트롤러에서 이벤트를 발생시킨 다음이 이벤트를 수신하고 그에 따라 행동하는 여러 응용 프로그램 (저장소, 서비스 등)에 여러 개의 "수신기"를 분산 시키려고합니다.

또한 IoC 컨테이너에 StructureMap을 사용하고 있습니다. 따라서 이벤트 디스패처가 IoC 컨테이너 대신 (또는 플러그 가능) 자체 디스 에이전트를 사용하는 것이 가장 좋습니다.

누구나이 작업을 수행하는 NuGet 패키지를 찾았습니까? 아니면 대안을 제시하는 기사/질문을 알려줄 수 있습니까?

답변

4

컨트롤러에는 무국적이 있어야합니다. 프레임 워크는 요청이 처리 된 후 제어기 객체를 파괴하고 다음 요청이 왔을 때 다시 작성합니다. 사실 ASP.NET MVC는 각 요청에 대해 별도의 컨트롤러 인스턴스를 만듭니다. 컨트롤러에서 이벤트를 선언하고 다른 응용 프로그램 서비스에서이 이벤트를 구독하면 메모리 누수가 발생할 수 있습니다 (GC는 다른 활성 객체의 컨트롤러에 대한 활성 참조가 있기 때문에 사용 된 컨트롤러를 파괴하지 않습니다).

는 또한 유휴 또는 다른 이유가있을 것입니다 경우 IIS 웹 응용 프로그램의 프로세스를 죽일 수 있음을 염두에 두어야하므로 웹 응용 프로그램은 또한 무 있어야한다. 또한 처리 해당 이벤트의 마음 동시성에 보관해야

,

당신은 이벤트 게시자 가입자 패턴을 채용 할 수 있지만, 청취 할 Windows 서비스, 예를 들어, 별도의 "대리인"으로 실행되어야한다 일부 포트 및 웹 응용 프로그램의 요청을 처리합니다.

0

컨트롤러가 이벤트를 발생시켜야한다고 생각하지 않습니다. 도메인 특정 유효성 검사를 수행 한 후에 도메인 논리에 맞는 것이어야합니다. 유효성 검사를 수행하기 전에 실제로 어떤 일이 발생했는지 어떻게 확인할 수 있습니까?

그러나 간단한 이벤트 기반 솔루션을 구현하는 것이 어렵지 않습니다. 나는 다음과 같이 갈 것입니다 :

준비가되면 이벤트 당 실행하려는 작업을 등록 할 수 있습니다. 나는 그것을 편집하지 않았지만 그런 것이 있어야한다.

+0

@downvoter 무엇이 잘못 되었습니까? –

관련 문제