我正在尝试在.NET Core应用程序中使用Azure Redis缓存。我写了一个CacheHelper通用方法,该方法实现了如下所示的通用接口。
但是,此问题与泛型更相关。
在将缓存值转换为通用类型时遇到错误。这是正确的方法吗?还是我错过了什么?请参见下面的代码。
appengineDeployTesting
答案 0 :(得分:3)
您可以在这里利用内置的pipeline
{
agent any
environment {
buildResult = 'null'
}
stages{
stage('Build Using Maven') {
steps{
echo env.buildResult
script
{
env.buildResult = "FALIURE"
}
echo env.buildResult
notifyBuild('STARTED')
withMaven(maven : 'maven'){
sh '''
mvn clean install -DskipTests
cd project_pom/pom_espo_bdd_tests
mvn test
'''
}
类来发挥自己的优势:
Convert
答案 1 :(得分:0)
我想再分享一个将 RedisValue 转换为 'T' 类型的实现。 RedisValue 实现了 IConvertible 接口,该接口具有将实例值转换为公共语言运行时类型的方法。这可能对某人有帮助。
private RedisValue GetStringInRedis(string key)
{
var redisDb = RedisConnection.GetDatabase();
var redisValue = redisDb.StringGet(redisKey);
if (redisValue.HasValue)
{
return redisValue;
}
return RedisValue.Null;
}
private T ChangeToType<T>(string key, RedisValue redisValue)
{
if (redisValue.IsNull)
return default(T);
try
{
var sRedisValue = redisValue;
if (typeof(T) == typeof(bool))
{
var tempRedisValue = (string) redisValue;
if (tempRedisValue.ToLower() == "true")
sRedisValue = RedisValue.Unbox(1);
else
sRedisValue = RedisValue.Unbox(0);
}
var obj = Convert.ChangeType(sRedisValue, typeof(T));
return (T) obj;
}
catch
{
throw new Exception($"Redis key '{key}' has invalid redis value '{redisValue}'");
}
}
public T GetValue<T>(string key)
{
var redisValue = GetStringInRedis(key);
return ChangeToType<T>(key, redisValue);
}
答案 2 :(得分:-1)
在我看来,如果使用ICacheHelper<T>
接口,则应该创建两个不同的实现。
一种用于实现string
的{{1}}类型。
所有其他实现ICacheHelper<string>
的类型之一。