private ConverterSet RegisterNullableType <T>() where T : struct { var underlyingTypeConverter = GetConverterSet(typeof(T)); if (underlyingTypeConverter == null) { throw new ArgumentException("Cannot find underlying type converter. Type=" + typeof(T).Name); } Func <T?, RedisValue> toFunc = o => o == null ? RedisValue.Null : ((Func <T, RedisValue>)underlyingTypeConverter.ToRedisValueFunc)(o.Value); Func <RedisValue, T?> fromFunc = o => o.IsNull ? null : (T?)((Func <RedisValue, T>)underlyingTypeConverter.FromRedisValueFunc)(o); var cs = new ConverterSet { ToRedisValueFunc = toFunc, FromRedisValueFunc = fromFunc, ObjectToRedisValueFunc = RedisTypeConverterHelper.ConvertToObjectToFunc(toFunc), ObjectFromRedisValueFunc = RedisTypeConverterHelper.ConvertToObjectFromFunc(fromFunc), }; lock (_converterMap) { _converterMap[typeof(T?)] = cs; return(cs); } }
public void Register <T>(Func <T, RedisValue> toRedisValueFunc, Func <RedisValue, T> fromRedisValueFunc) { var cs = new ConverterSet { ToRedisValueFunc = toRedisValueFunc, FromRedisValueFunc = fromRedisValueFunc, ObjectToRedisValueFunc = RedisTypeConverterHelper.ConvertToObjectToFunc(toRedisValueFunc), ObjectFromRedisValueFunc = RedisTypeConverterHelper.ConvertToObjectFromFunc(fromRedisValueFunc), }; lock (_converterMap) { _converterMap[typeof(T)] = cs; } }
public void Register(Type type, Func <object, RedisValue> toRedisValueFunc, Func <RedisValue, object> fromRedisValueFunc) { var cs = new ConverterSet { ToRedisValueFunc = RedisTypeConverterHelper.ConvertToToFunc(type, toRedisValueFunc), FromRedisValueFunc = RedisTypeConverterHelper.ConvertToFromFunc(type, fromRedisValueFunc), ObjectToRedisValueFunc = toRedisValueFunc, ObjectFromRedisValueFunc = fromRedisValueFunc, }; lock (_converterMap) { _converterMap[type] = cs; } }
private ConverterSet RegisterWithJsonSerialization <T>() { Func <T, RedisValue> toFunc = v => JsonConvert.SerializeObject(v, _jsonSerializerSettings); Func <RedisValue, T> fromFunc = o => JsonConvert.DeserializeObject <T>(o, _jsonSerializerSettings); var cs = new ConverterSet { ToRedisValueFunc = toFunc, FromRedisValueFunc = fromFunc, ObjectToRedisValueFunc = RedisTypeConverterHelper.ConvertToObjectToFunc(toFunc), ObjectFromRedisValueFunc = RedisTypeConverterHelper.ConvertToObjectFromFunc(fromFunc), }; lock (_converterMap) { _converterMap[typeof(T)] = cs; return(cs); } }