如何在C#中使用Attribute來(lái)實(shí)現(xiàn)緩存功能

c#
小樊
91
2024-08-12 04:43:40

在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ù)并輸出。

0