/// <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)); }