在C#中使用Attribute來(lái)實(shí)現(xiàn)緩存功能可以通過(guò)自定義一個(gè)Attribute類(lèi)來(lái)實(shí)現(xiàn)。以下是一個(gè)簡(jiǎn)單的例子:
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()
{
// 從緩存中獲取數(shù)據(jù),如果緩存過(guò)期則重新獲取數(shù)據(jù)并存入緩存
return "Cached data";
}
}
public class CacheManager
{
public static object GetCachedData(Func<object> method, CacheAttribute attribute)
{
// 檢查緩存是否過(guò)期
// 如果過(guò)期則調(diào)用方法獲取數(shù)據(jù)并存入緩存
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);
}
}
在上面的例子中,我們定義了一個(gè)CacheAttribute
來(lái)標(biāo)記需要緩存的方法,并在MyService
類(lèi)中使用了該Attribute。在CacheManager
類(lèi)中,我們定義了一個(gè)靜態(tài)方法GetCachedData
來(lái)處理緩存邏輯。在Program
類(lèi)中,我們獲取了GetData
方法上的CacheAttribute
,然后通過(guò)CacheManager
來(lái)獲取數(shù)據(jù)并輸出。