发布2020.0601
大石头 编写于 2020-05-31 10:19:29
X
using System;
using System.Collections.Generic;
using NewLife.Collections;
using NewLife.Data;

namespace NewLife.Model
{
    /// <summary>处理器上下文</summary>
    public interface IHandlerContext : IExtend
    {
        /// <summary>管道</summary>
        IPipeline Pipeline { get; set; }

        /// <summary>上下文拥有者</summary>
        Object Owner { get; set; }

        /// <summary>读取管道过滤后最终处理消息</summary>
        /// <param name="message"></param>
        void FireRead(Object message);

        /// <summary>写入管道过滤后最终处理消息</summary>
        /// <param name="message"></param>
        Boolean FireWrite(Object message);
    }

    /// <summary>处理器上下文</summary>
    public class HandlerContext : IHandlerContext, IExtend3
    {
        #region 属性
        /// <summary>管道</summary>
        public IPipeline Pipeline { get; set; }

        /// <summary>上下文拥有者</summary>
        public Object Owner { get; set; }

        /// <summary>数据项</summary>
        public IDictionary<String, Object> Items { get; } = new NullableDictionary<String, Object>();

        /// <summary>设置 或 获取 数据项</summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public Object this[String key] { get => Items[key]; set => Items[key] = value; }
        #endregion

        #region 方法
        /// <summary>读取管道过滤后最终处理消息</summary>
        /// <param name="message"></param>
        public virtual void FireRead(Object message) { }

        /// <summary>写入管道过滤后最终处理消息</summary>
        /// <param name="message"></param>
        public virtual Boolean FireWrite(Object message) => true;
        #endregion
    }
}