在C#中使用Attribute来实现缓存功能可以通过自定义一个Attribute类来实现。以下是一个简单的例子:
using System;
[AttributeUsage(AttributeTargets.Method)]
public class CacheAttribute : Attribute
{
public int CacheDuration { get; set; }
public CacheAttribute(int duration)
{
CacheDuration = duration;
}
}
public class MyService
{
[Cache(60)] // 缓存60秒
public string GetData()
{
// 从缓存中获取数据,如果缓存过期则重新获取数据并存入缓存
return "Cached data";
}
}
public class CacheManager
{
public static object GetCachedData(Func<object> method, CacheAttribute attribute)
{
// 检查缓存是否过期
// 如果过期则调用方法获取数据并存入缓存
return method();
}
}
class Program
{
static void Main(string[] args)
{
MyService myService = new MyService();
var method = typeof(MyService).GetMethod("GetData");
var attribute = (CacheAttribute)Attribute.GetCustomAttribute(method, typeof(CacheAttribute));
object data = CacheManager.GetCachedData(() => myService.GetData(), attribute);
Console.WriteLine(data);
}
}
在上面的例子中,我们定义了一个CacheAttribute
来标记需要缓存的方法,并在MyService
类中使用了该Attribute。在CacheManager
类中,我们定义了一个静态方法GetCachedData
来处理缓存逻辑。在Program
类中,我们获取了GetData
方法上的CacheAttribute
,然后通过CacheManager
来获取数据并输出。