2011-02-28 6 views
2

여러 이벤트 리스너를 등록 할 수 있습니까?NHibernate 여러 이벤트 리스너

현재 AddSoftDelete가 수신기를 등록하는 클래스 인 .ExposeConfiguration (AddSoftDelete)을 사용하여 이벤트 리스너를 등록합니다.

private static void AddSoftDelete(Configuration config) 
{ 
    config.SetListener(ListenerType.Delete, new SoftDeleteListener()); 
} 

우리는 우리가, 즉 우리가 "ListenerType.Delete"에 대해 둘 이상의 리스너를 등록 할 수있는 동일한 유형의 여러 이벤트 리스너를 등록 할 수없는 것으로 나타났습니다.

기존 리스너를 무시하지 않고 새 리스너를 등록 할 수 있습니까?

해결 ...

다음 코드를 사용하여 여러 청취자를 등록 할 수있었습니다.

config.EventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] 
                   { 
                    new Listener1(), 
                    new Listener2() 
                   }; 

각 ListenerType에 대해 반복하십시오.

답변

0

리스너는 실제로는 리스너가 아니며 구현 자입니다. "이벤트"는 하나만 구현 될 수 있습니다.

여러 구현을 연결할 수있는 리스너를 구현할 수 있습니다. 예를 들어 다른 엔티티 유형에 대한 구현입니다. 그들 중 하나가 처리 할 때까지 (예 : ISoftDeletable 인터페이스가 구현 될 때 SoftDeleteImplementor이 처리 할 때까지) "구현"에 각 이벤트를 전달할 수 있습니다. 경쟁하는 구현자를 신경 써야합니다 (더 많은 사람이 그것을 처리 할 수 ​​있고, 호출하는 순서가 중요합니다).

+0

이것은 내 생각을 바른 길로 인도 한 아주 좋은 설명이었습니다. – Wozart

0

왜 하나 이상의 ListenerType.Delete를 등록해야합니까?

하나의 유형에 여러 이벤트 리스너가있는 경우 애플리케이션에 성능 문제가있을 수 있습니다. 이 수신기로 다른 엔티티를 처리하려면 SoftDeleteListener 클래스에서 처리하십시오.

+0

동의합니다.이 예는 단지 예입니다. 질문은 같은 유형의 여러 리스너를 등록하는 것과 관련이 있습니다. 도움이된다면 리스너가 다른 유형, 즉 PostUpdate, PreInsert 등 – Wozart

+0

OK라고 가정 해 봅시다. 이 "config.SetListener (ListenerType.Delete, 새 SoftDeleteListener());"라는 줄을 추가하십시오. " 그게 전부 야. –

0

나는 나의 코드에서 비슷한 것을한다. NHibernate.Cfg.Configuration 객체에는 AppendListeners (ListenerType 유형, object [] listener) 메소드가 있어야합니다.

리스너 목록을 추가하는 대신 리스너 목록을 대체한다고 가정하는 SetListeners 메서드가 있습니다.

+1

당신이 설명하는 것을해야하는'SetListeners (ListenerType, object [])'메쏘드가 있습니다. –

관련 문제