/// <summary>
        /// 深层拷贝一个实例对象。
        /// </summary>
        /// <typeparam name="TObject">带序列化的目标类</typeparam>
        /// <param name="obj">目标类的一个实例对象。</param>
        /// <param name="serializationAction">深层拷贝对象的方式:<c>null</c> = 二进制拷贝方式(必须标记 Serializable 特性,或者实现 ISerializable 接口)。</param>
        /// <returns>深层克隆的一个目标类的实例对象。</returns>
        public static TObject Copy <TObject>(this TObject obj, IObjectSerialization serializationAction = null) where TObject : class
        {
            if (ReferenceEquals(obj, null))
            {
                return(obj);
            }

            if (ReferenceEquals(serializationAction, null))
            {
                serializationAction = new BinarySerialization {
                    ObjectType = typeof(TObject)
                }
            }
            ;
            else
            {
                serializationAction.ObjectType = typeof(TObject);
            }

            using (var stream = serializationAction.Serialize(obj))
            {
                stream.Seek(0, SeekOrigin.Begin);
                return((TObject)serializationAction.Deserialize(stream));
            }
        }
 public SingleItemSerialization(ILogger <SingleItemSerialization <T> > log, IRedisLink link, IObjectSerialization <T> objectSerialization, IMainIndexManager mainIndexManager)
     : base(log, link, mainIndexManager)
 {
     this.objectSerialization = objectSerialization ?? throw new ArgumentNullException(nameof(objectSerialization));
     this.mainIndexManager    = mainIndexManager ?? throw new ArgumentNullException(nameof(mainIndexManager));
     this.log  = log ?? throw new ArgumentNullException(nameof(log));
     this.link = link ?? throw new ArgumentNullException(nameof(link));
 }
 public ObjectListSerialization(ILogger <ObjectListSerialization <T> > logger, IRedisLink link, IObjectSerialization <T> objectSerialization, IRedisSetList redisSetList, IMainIndexManager mainIndexManager)
 {
     this.objectSerialization = objectSerialization ?? throw new ArgumentNullException(nameof(objectSerialization));
     this.redisSetList        = redisSetList ?? throw new ArgumentNullException(nameof(redisSetList));
     this.mainIndexManager    = mainIndexManager ?? throw new ArgumentNullException(nameof(mainIndexManager));
     this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
     this.link   = link ?? throw new ArgumentNullException(nameof(link));
 }