在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
來獲取數據并輸出。