首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SDL Tridion EventSubscription UnSubscribe问题

SDL Tridion EventSubscription UnSubscribe问题
EN

Stack Overflow用户
提问于 2012-11-23 05:50:10
回答 1查看 223关注 0票数 5

我们正在尝试在我们的事件代码中取消订阅eventSubscripton。我们使用以下代码

代码语言:javascript
复制
[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();
    }}

我们观察到的是,一旦调用了“{EventSubsciption}.Unsubscribe”,eventing就会停止对它应该工作的后续事件的工作。一旦与事件系统相关的服务重新启动,事件代码只在第一次按预期工作,并且不会在后续事件中被调用(对于它应该工作的事件)。

EN

回答 1

Stack Overflow用户

发布于 2012-11-23 06:23:53

尝试删除Dispose方法,看看是否会有所不同。Tridion可能会在触发事件的第一个实例时实例化事件处理程序,然后再也不会实例化,直到系统重新启动。因此,如果您取消订阅并进行处置,那么您的类将不会再次实例化。也有可能你的环境中有其他东西在干扰你。很难说,但尝试先删除Dispose。

我的样板处理程序看起来像这样:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using Tridion.ContentManager;
using Tridion.ContentManager.CommunicationManagement;
using Tridion.ContentManager.ContentManagement;
using Tridion.ContentManager.ContentManagement.Fields;
using Tridion.ContentManager.Extensibility;
using Tridion.ContentManager.Extensibility.Events;

namespace NicksEventSystem
{
    [TcmExtension("NicksEventSystemExtension")]
    public class NicksEventHandler : TcmExtension
    {
        public NicksEventHandler()
        {
            Subscribe();
        }

        private void Subscribe()
        {
            EventSystem.Subscribe<Component, FinishActivityEventArgs>(MyEvent, EventPhases.TransactionCommitted);
        }

        private void MyEvent(Component wfComponent)
        {
            //... Do stuff!
        }

    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13520442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档