Staramy się anulować subskrypcję eventSubscripton w naszym Kodzie Wdrażania. Używamy następujący kodSDL Tridion EventSubscription UnSubscribe Issue
[TcmExtension("EventHandlerExtension")]
public class EventHandler : TcmExtension, IDisposable
{
private EventSubscription componentSaveSubscription = null;
private EventSubscription componentPublishSubscription = null;
#region Public Methods
/// <summary>
/// Handle for Eventing System
/// </summary>
public EventHandler()
{
Subscribe();
}
/// <summary>
/// Subscribe Events
/// </summary>
public void Subscribe()
{
//News Article Page created when component Save
componentSaveSubscription = EventSystem.Subscribe<Component, SaveEventArgs>(OnComponentSavePost, EventPhases.TransactionCommitted);
//EventSystem.Subscribe<Component, SaveEventArgs>(OnComponentSavePost, EventPhases.TransactionCommitted);
componentPublishSubscription = EventSystem.Subscribe<Component, PublishOrUnPublishEventArgs>(OnComponentPublishOrUnPublishPost, EventPhases.TransactionCommitted);
//EventSystem.Subscribe<StructureGroup, PublishOrUnPublishEventArgs>(OnStructureGroupPublishInitiated, EventPhases.TransactionCommitted);
}
/// <summary>
/// IDisposable Implementation
/// </summary>
public void Dispose()
{
if (componentSaveSubscription != null) componentSaveSubscription.Unsubscribe();
if (componentPublishSubscription != null) componentPublishSubscription.Unsubscribe();
}}
Co możemy stwierdzić, że po „{} .Unsubscribe EventSubsciption” nazywa, WKKW przestaje działać dla kolejnych zdarzeń, dla których jest to ma działać. Po ponownym uruchomieniu usług związanych z systemem zdarzeń kod zdarzenia działa zgodnie z oczekiwaniami po raz pierwszy i nigdy nie jest wywoływany dla kolejnych zdarzeń (dla których miał działać).
Po 'Dispose() wywoływana jest metoda' Twój obiektu? O ile mi wiadomo, powinno się to zdarzyć tylko wtedy, gdy moduł, który uruchamia program obsługi, jest zamknięty (a potencjalnie nawet wtedy nie). –
A jeśli nie pozbędziesz się() działa zgodnie z oczekiwaniami? Więc przestań się wyrzucać? –